C90 표준에서는 0, 1, 2 위치에서 인덱스를 초기화하는 것과 같이 고정된 순서로 배열을 초기화해야 합니다. C99 표준부터 C에 지정된 초기화 기능을 도입했습니다. 여기에서 임의의 순서로 요소를 초기화할 수 있습니다. 초기화는 배열 인덱스 또는 구조체 멤버를 사용하여 수행할 수 있습니다. 이 확장은 GNU C++에서 구현되지 않습니다.
인덱스를 지정하고 값을 넣으면 다음과 같이 표시됩니다. -
int arr[6] = {[3] = 20, [5] = 40}; or int arr[6] = {[3]20, [5]40};
이것은 다음과 동일합니다.
int arr[6] = {0, 0, 0, 20, 0, 40};
다음 구문을 사용하여 일부 요소 범위를 넣을 수도 있습니다. [first ... last] =value.
int arr[6] = {[2 … 4] = 10};
이것은 다음과 동일합니다.
int arr[6] = {0, 0, 10, 10, 10, 0};
배열의 크기가 정의되지 않은 경우 최대 인덱스 위치에서 크기를 가져올 수 있습니다. 더 나은 아이디어를 얻기 위해 코드를 살펴보겠습니다.
예시 코드
#include <stdio.h> int main() { int Array[] = {10, 20, 30, [3 ... 9] = 100, [10] = 65, 15, [80] = 50, [42] = 400 }; int i; for (i = 0; i < 20; i++) printf("%d ", Array[i]); printf("\nArray[%d] = %d\n",80, Array[80]); printf("Array[%d] = %d\n",42, Array[42]); printf("Size of this array: %ld\n", sizeof(Array) / sizeof(Array[0])); }
출력
10 20 30 100 100 100 100 100 100 100 65 15 0 0 0 0 0 0 0 0 Array[80] = 50 Array[42] = 400 Size of this array: 81
이 지정된 초기화는 구조체 또는 공용체 유형 개체에 대해서도 수행할 수 있습니다. 그들을 위해 우리는 순서에 상관없이 시작 부분에 하나의 점(.)이 있는 멤버 변수의 이름을 사용하여 변수를 초기화할 수 있습니다. 명확한 아이디어를 얻으려면 아래 코드를 확인하십시오.
예시 코드
#include <stdio.h> struct myStruct { int x; float y; char z; }; int main() { struct myStruct str1 = {.y = 2.324, .z = 'f', .x = 78}; struct myStruct str2 = {.z = 'r'}; printf ("x = %d, y = %f, z = %c\n", str1.x, str1.y, str1.z); printf ("z = %c\n", str2.z); }
출력
x = 78, y = 2.324000, z = f z = r