2017-10-15 19 views
-2

나는 C++ 배열에 널 터미네이터를 사용하는 방법에 대해 학습 한 나는 이유를 예를 들어 0배열을 null 종결 자로 초기화하면 메모리의 모든 섹션이 "null"이되지 않는 이유는 무엇입니까?

로 초기화와 동일하게 작동하지 않는 널 (NULL) 종료에 배열을 초기화하는 혼동되었습니다

I는 0으로 초기화하는 것은 setOfCharacters 어레이 내의 각 메모리 위치로 시작하는 0을 보유하고 있다는 것을 의미 알고
char setOfCharacters [15] = {0}; 

char setOfCharacters [15] = {'\0'}; 

비교. 하지만 배열을 널 종결 자로 초기화 할 때 왜 똑같은 작업을하지 않습니까? 사실

+2

"*하지만 왜 널 터미네이터로 배열을 초기화 할 때 동일한 작업을 수행하지 않습니까? *"누가 그렇지 않다고 말합니까? –

+0

그러면 양쪽 모두 똑같이 행동해야합니다. 당신은 [mcve]가 필요합니다. – juanchopanza

+1

의아해. 이 경우 '\ 0'과 '0'은 같은 결과를 낳습니다. 데모 : https://ideone.com/g5h4DF – user4581301

답변

1

char setOfCharacters [15] = {0}; 

숯 setOfCharacters 동등이 초기화 [15] = {(숯) 0};

char 유형의 객체에 0을 설정하면 문자 리터럴 '\0'을 사용하여 쓸 수도 있습니다.

명시 적으로 초기화되지 않은 어레이의 다른 모든 요소는 제로가 초기화 될 모두 초기화

char setOfCharacters [15] = {'\0'}; 

char setOfCharacters [15] = {0}; 

결과.

는 비교

'\0' == 0 

항상 true를 산출 고려. 이 비교에서 문자 리터럴은 유형 int으로 승격됩니다 (예 : C에서 정의에 의한 문자 상수는 int입니다).

+0

@Tas 나는 "also"라는 단어를 더 명확히하기 위해이 단어를 업데이트했습니다. –