본문 바로가기
컴퓨터 공학/C, C++

[ C ]커스텀 자료형 이해하기3_구조체 배열, 포인터

by hahehohoo 2020. 7. 24.
반응형

 

C언어 문법 구조체 배열, 포인터

 

 

■ 구조체 배열 정의 및 선언

 

구조체 변수를 여러개 사용해야 할 때는 구조체 배열을 선언하면 됩니다. 선언방법은 일반 배열과 동일합니다. 

 

struct point pointArr[3]; // 크기 3인 point형 구조체 배열 선언 

 

그럼 다음과 구조로 배열이 할당됩니다. 

 

 

■ 구조체 배열 초기화

구조체 배열을 선언과 동시에 초기화할 때는 배열의 길이만큼  중괄호를 통해서 초기화할 값을 명시합니다. 

struct point pointArr[3] // 크기 3인 point형 구조체 배열 선언 
{
   {3, 4} // 첫 번째 요소의 초기화
   {2, 1} // 두 번째 요소의 초기화
   {5, 9) // 세 번째 요소의 초기화
}; 

 

 

■ 구조체 변수와 포인터

포인터도 구조체의 멤버가 될 수 있습니다. 또한 구조체도 포인터를 선언할 수 있고, 구조체 포인터에는 malloc 함수를 사용하여 동적 메모리를 할당할 수 있습니다. 아래 예제에서는 다음과 같은 점을 포함합니다.

 

- 구조체의 멤버로 포인터가 있는 경우

- 구조체로 포인터 변수를 선언하는 경우

 

#include <stdio.h>

struct point
{
   int xpos;
   int ypos;
};

struct circle 
{
   double radius;
   struct point * center; // 구조체 point의 포인터 변수 선언
};

int main(void)
{
   struct point cen = {2,7} // struct 선언으로 구조체 point형 변수를 정의하고 안의 멤버를 각각 2와 7로 초기화
   double rad = 5.5;
   
   struct circle ring = {rad, &cen}; // 구조체 변수에 &연산 할 수 있다
   printf("원의 반지름: %g \n", ring.radius);
   printf("원의 중심 [%d, %d] \n", (ring.center)->xpos, (ring.center)->ypos);
   return 0;
}
   

 

구조체 변수 ring의 멤버 center가 포인터 변수이므로 ring.center를 대상으로 -> 연산으로 구조체 변수 cen의 멤버에 접근할 수 있습니다.

또한 구조체 변수의 주소 값은 구조체 변수의 첫 번째 멤버의 주소값과 동일합니다. 관련 예제를 보겠습니다. 

 

#include <stdio.h>

struct point
{
   int xpos;
   int ypos;
};

int main(void)
{
   struct point pos = {10, 20};
   printf("%p %p \n", &pos, &pos.xpos };
   return 0;
}

 

위 예제 실행 결과

003Ef7B8 003Ef7B8

 

 

 

 

 

-----------------------------------

C언어 문법 총정리

목록 보러가기 

-----------------------------------

 

 

 

 

반응형


댓글