Programming/C

C언어 - 구조체(struct)

경원구 2016. 5. 26. 10:00

<구조체란?>

하나 이상의 변수를 묶어 그룹화하는 사용자 정의 자료형이다. 그룹화 할 때 같은 자료형을 가진 변수들을 묶어 그룹화할 수 있고, 서로 다른 자료형을 가진 변수들을 묶어 그룹화 할 수 있다.

 



<구조체의 구조>

struct point

{

   int x;   // 구조체 멤버 변수

   int y;

}

구조체 키워드 struct를 사용해서 구조체의 이름은 point로 하였다.

 



<구조체 변수 선언>

구조체 변수 선언은 두 가지 방법이 있다.

1. 구조체 정의와 구조체 변수 선언을 동시에 하는 방법

struct point

{

   int x;

   int y;

} p1, p2, p3;   // 구조체 변수

 

2. 구조체 정의와 구조체 변수 선언을 따로 선언하는 방법

struct point

{

   int x;

   int y;

};

 

int main()

{

   struct point p1, p2, p3;   // 구조체 변수

   return 0;

}

 



<구조체 멤버 변수 접근>

구조체 변수로 멤버 변수에 접근하는 법은 구조체 변수를 사용하면 된다.

이때 접근 연산자는 "."이다.

struct point

{

   int a;

   double b;

};

 

int main()

{

   struct point p1;

   scanf("%d %lf", &p1.a, %p1.b);

   printf("%d \n", p1.a);

   printf("%d \n", p1.b);

   return 0;

}

이때 구조체 변수 p1으로 구조체 멤버 변수 ab에 각각 접근하고 있다.

 


<구조체 변수의 초기화>

struct p

{

   int x;

   int y;

}

int main()

{

   struct p p1={10,20};   // p1이라는 구조체 변수안에 할당된 x, y 구조체 멤버 변수에 10, 20을 저장한다.

}

주의사항

struct point p1;

p1={10,20};   // 이렇게 구조체 변수를 초기화 할때 구조체 변수 선언과 초기화를 따로하면 에러난다.

      

struct point p1;

p1.x=10;   // 구조체 멤버 변수로 직접 접근해야지 에러가 안난다.

p1.y=20;

 

 

<구조체 변수의 복사>

struct point

{

   int x;

   int y;

};

struct point p1={10,20};

struct point p2={0,0};

p2=p1;   // 구조체 변수의 복사

printf(%d %d \n", p2.x, p2.y);   // 10, 20출력

 

구조체 변수끼리 연산을 가능할까?

p1+p2   // 불가능 하다. 구조체 변수는 대입 연산만 가능함!