C ++ 배열 초기화 형식입니다. char myarray[ARRAY_SIZE]

배열을 모두 0으로 초기화하는이 형식입니다.

char myarray[ARRAY_SIZE] = {0} 모든 컴파일러에서 지원합니까? ,

그렇다면 다른 유형과 유사한 구문이 있습니까? 예를 들면

bool myBoolArray[ARRAY_SIZE] = {false}


답변

예,이 초기화 형식은 모든 C ++ 컴파일러에서 지원됩니다. C ++ 언어의 일부입니다. 사실, 그것은 C 언어에서 C ++로 온 관용구입니다. C 언어에서는 = { 0 }관용적 범용 제로 이니셜 라이저 입니다. 이것은 C ++ 에서도 거의 마찬가지입니다.

이 초기화는 보편적이기 때문에 bool배열에 대해 다른 “구문”이 실제로 필요하지 않습니다. 유형에 0대한 이니셜 라이저로도 작동 bool하므로

bool myBoolArray[ARRAY_SIZE] = { 0 };

로 전체 배열을 초기화하도록 보장됩니다 false. 만큼 잘

char* myPtrArray[ARRAY_SIZE] = { 0 };

in 유형의 null 포인터로 전체 배열을 초기화하도록 보장합니다 char *.

가독성이 향상되었다고 생각되면 확실히 사용할 수 있습니다.

bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };

하지만 요점은 = { 0 }변형이 정확히 동일한 결과를 제공 한다는 것입니다.

그러나 C ++ = { 0 }에서는 enum 형식과 같이 정수로 초기화 할 수없는 모든 형식에 대해 작동하지 않을 수 있습니다 0. 그러나 C ++는 더 짧은 형식을 지원합니다.

T myArray[ARRAY_SIZE] = {};

즉, {}. 이렇게하면 모든 유형의 배열이 기본 초기화됩니다 (요소가 기본 초기화를 허용한다고 가정). 즉, 기본 (스칼라) 유형의 경우 전체 배열이 제대로 0으로 초기화됩니다.


답변

‘=’는 C ++ 11 범용 초기화 구문에서 선택 사항이며 일반적으로 작성하는 것이 더 나은 스타일로 간주됩니다.

char myarray[ARRAY_SIZE] {0}

답변

예, 작동해야한다고 생각하며 다른 데이터 유형에도 적용 할 수 있습니다.

그러나 클래스 배열의 경우 이니셜 라이저 목록에있는 항목이 배열의 요소보다 적 으면 나머지 요소에 대해 기본 생성자가 사용됩니다. 클래스에 대해 기본 생성자가 정의되지 않은 경우 이니셜 라이저 목록이 완전해야합니다. 즉, 배열의 각 요소에 대해 하나의 이니셜 라이저가 있어야합니다.


답변

이러한 유형의 방법으로 C ++에서 배열을 선언 할 수 있습니다. 배열 크기를 알고 있다면 다음과 같이 배열을 선언해야합니다. integer : int myArray[array_size];
Double : double myArray[array_size];
Char and string : char myStringArray[array_size];
char와 string의 차이점은 다음과 같습니다.

char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";

배열의 크기를 모르는 경우 다음과 같이 배열을 비워 두어야합니다.

정수: int myArray[array_size];

더블: double myArray[array_size];