Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C의 지정된 이니셜라이저

<시간/>

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