결론적으로 C 언어에서 전역 변수로 선언된 구조체 배열은 초기화 시 값을 지정하지 않아도 자동으로 0또는 NULL 로 초기화된다. 왜냐하면 전역 변수가 데이터 세그먼트에 저장되며, 이 영역의 모든 메모리는 실행 시 초기화되기 때문이다.
그러나 지역 변수로 선언된 구조체 배열은 자동으로 초기화되지 않기 때문에 값을 지정하지 않으면 쓰레기 값을 초기화 된다. 이는 프로그램의 동작을 예측할 수 없게 만들고 버그의 원인이 될 수 있다.
전역변수 구조체 배열 예제
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct Point {
int x, y;
};
// 전역 변수로 선언된 구조체 배열
struct Point points_initialized[3] = { {1, 2}, {3, 4}, {5, 6} }; // 명시적 초기화
struct Point points_uninitialized[3]; // 초기화하지 않음
int main() {
printf("Initialized Global Points:\n");
for (int i = 0; i < 3; i++) {
printf("Point %d: (%d, %d)\n", i, points_initialized[i].x, points_initialized[i].y);
}
printf("\nUninitialized Global Points (Automatically initialized to 0):\n");
for (int i = 0; i < 3; i++) {
// 초기화하지 않은 전역 변수 구조체 배열은 자동으로 0으로 초기화됨
printf("Point %d: (%d, %d)\n", i, points_uninitialized[i].x, points_uninitialized[i].y);
}
return 0;
}
Initialized Global Points:
Point 0: (1, 2)
Point 1: (3, 4)
Point 2: (5, 6)
Uninitialized Global Points (Automatically initialized to 0):
Point 0: (0, 0)
Point 1: (0, 0)
Point 2: (0, 0)
이 예제에서 points_initialized 배열은 명시적으로 초기화되어 있으며, points_uninitialized 배열은 초기화하지 않았다. 코드 실행 결과, points_initialized는 개발자가 지정한 값으로 출력되고, points_uninitialized는 모든 멤버가 자동으로 0으로 초기화된 것을 확인할 수 있.
지역변수 구조체 배열 예제
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct Point {
int x, y;
};
int main() {
struct Point points_initialized[3] = { {1, 2}, {3, 4}, {5, 6} };
struct Point points_uninitialized[3]; // 초기화하지 않음
printf("초기화 구조체 배열:\n");
for (int i = 0; i < 3; i++) {
printf("Point %d: (%d, %d)\n", i, points_initialized[i].x, points_initialized[i].y);
}
printf("\n초기화하지 않은 구조체 배열:\n");
for (int i = 0; i < 3; i++) {
// 초기화하지 않은 구조체 배열의 값들은 쓰레기 값일 수 있음
printf("Point %d: (%d, %d)\n", i, points_uninitialized[i].x, points_uninitialized[i].y);
}
return 0;
}
초기화 구조체 배열:
Point 0: (1, 2)
Point 1: (3, 4)
Point 2: (5, 6)
초기화하지 않은 구조체 배열:
Point 0: (-858993460, -858993460)
Point 1: (-858993460, -858993460)
Point 2: (-858993460, -858993460)
이 코드는 초기화된 구조체 배열과 초기화되지 않은 구조체 배열을 비교하여 출력한다. 초기화되지 않은 배열의 값은 쓰레기 값(정의되지 않은 값)이 출력될 수 있음을 보여준다.
'윤성우의 C Programming' 카테고리의 다른 글
Chapter 22 구조체와 사용자 정의 자료형 1 (2) (0) | 2024.03.10 |
---|---|
Chapter 22. 구조체와 사용자 정의 자료형1 (1) (0) | 2024.03.08 |
main 함수로의 인자 전달 (3) | 2024.03.06 |
Chapter 19. 함수 포인터와 void 포인터 (1) | 2024.03.05 |
'배열 포인터' 와 '포인터 배열'을 혼동하지 말자 (0) | 2024.03.02 |