반응형
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, C++' 카테고리의 다른 글
[ C ]커스텀 자료형 이해하기5_공용체(Union Type)이란? 정의/사용하는 이유 (404) | 2020.07.24 |
---|---|
[ C ]커스텀 자료형 이해하기4_함수 반환값으서의 구조체 (412) | 2020.07.24 |
[ C ]커스텀 자료형 이해하기2_typedef이란? typedef사용법 (403) | 2020.07.24 |
[ C ]커스텀 자료형 이해하기1_구조체란? 정의/선언/용도/초기화 (402) | 2020.07.24 |
[ C ]메모리 이해하기12_메모리 정리 (413) | 2020.07.23 |
댓글