[C언어 스터디 - 07] 구조체 배열 (struct array)
2020. 6. 27. 11:00ㆍ03. Resources/C, C++
728x90
반응형
구조체 배열 사용하기
참고 문헌 (Ch 53): https://dojang.io/mod/page/view.php?id=445
구조체 배열 선언하기
선언하는 방법: struct (구조체 이름) (변수 이름)[배열 크기];
선언한 구조체의 멤버에 접근하는 방법: (변수 이름)[인덱스].(멤버 이름)
#include <stdio.h>
struct Point2D {
int x;
int y;
};
int main()
{
struct Point2D p[3]; // 크기가 3인 구조체 배열 생성
p[0].x = 10; // 인덱스로 요소에 접근한 뒤 점으로 멤버에 접근
p[0].y = 20;
p[1].x = 30;
p[1].y = 40;
p[2].x = 50;
p[2].y = 60;
printf("%d %d\n", p[0].x, p[0].y); // 10 20
printf("%d %d\n", p[1].x, p[1].y); // 30 40
printf("%d %d\n", p[2].x, p[2].y); // 50 60
return 0;
}
선언하는 동시에 초기화 하는 방법: 중괄호 안에 중괄호를 사용하여 멤버별 초기 값을 설정해줘야함.
#include <stdio.h>
struct Point2D {
int x;
int y;
};
int main()
{
// 구조체 배열을 선언하면서 초기화
struct Point2D p1[3] = { { .x = 10, .y = 20 }, { .x = 30, .y = 40 }, { .x = 50, .y = 60 } };
// struct Point2D p[3] = {0,}: 그냥 전체 다 0으로 초기화하는 방법
printf("%d %d\n", p1[0].x, p1[0].y); // 10 20
printf("%d %d\n", p1[1].x, p1[1].y); // 30 40
printf("%d %d\n", p1[2].x, p1[2].y); // 50 60
// 구조체 배열을 선언하면서 초기화
struct Point2D p2[3] = { { 10, 20 }, { 30, 40 }, { 50, 60 } };
printf("%d %d\n", p2[0].x, p2[0].y); // 10 20
printf("%d %d\n", p2[1].x, p2[1].y); // 30 40
printf("%d %d\n", p2[2].x, p2[2].y); // 50 60
return 0;
}
구조체 포인터 배열 선언하기
선언하는 방법: struct (구조체 이름) (*포인터이름)[크기];
#include <stdio.h>
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일
struct Point2D {
int x;
int y;
};
int main()
{
struct Point2D *p[3]; // 크기가 3인 구조체 포인터 배열 선언
// 구조체 포인터 배열 전체 크기에서 요소(구조체 포인터)의 크기로 나눠서 요소 개수를 구함
for (int i = 0; i < sizeof(p) / sizeof(struct Point2D *); i++) // 요소 개수만큼 반복
{
p[i] = malloc(sizeof(struct Point2D)); // 각 요소에 구조체 크기만큼 메모리 할당
}
p[0]->x = 10; // 인덱스로 요소에 접근한 뒤 화살표 연산자로 멤버에 접근
p[0]->y = 20;
p[1]->x = 30;
p[1]->y = 40;
p[2]->x = 50;
p[2]->y = 60;
printf("%d %d\n", p[0]->x, p[0]->y); // 10 20
printf("%d %d\n", p[1]->x, p[1]->y); // 30 40
printf("%d %d\n", p[2]->x, p[2]->y); // 50 60
for (int i = 0; i < sizeof(p) / sizeof(struct Point2D *); i++) // 요소 개수만큼 반복
{
free(p[i]); // 각 요소의 동적 메모리 해제
}
return 0;
}
반응형
'03. Resources > C, C++' 카테고리의 다른 글
[C언어 스터디 - 09] 기본적인 함수 내용 (function basic) (0) | 2020.06.29 |
---|---|
[C언어 스터디 - 08] 열거형 (enum)] (0) | 2020.06.28 |
[C언어 스터디 - 06] 구조체 멤버값 설정 (memset) (0) | 2020.06.26 |
[C언어 스터디 - 05] 구조체와 포인터 (struct and pointer) (0) | 2020.06.25 |
[C언어 스터디 - 04] 구조체 (struct) (0) | 2020.06.24 |