Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C와 C++에서 문자열 리터럴의 자료형은 무엇인가?

C 언어에서 문자열 리터럴의 자료형은 char[], 즉 char 배열입니다. 반면 C++에서 일반 문자열 리터럴은 'n개의 const char로 구성된 배열(array of n const char)' 타입을 가집니다.

예를 들어, 문자열 리터럴 "Hello"는 널 종료 문자 '\0'까지 포함하여 총 6개의 요소를 가지므로, 그 자료형은 '6개의 const char로 구성된 배열', 즉 const char[6]입니다.

const char s[6] = "Hello"; // "Hello"와 동일한 타입의 배열

다만 이 배열은 배열-포인터 변환(array-to-pointer conversion)에 의해 const char* 타입으로 암시적으로 변환될 수 있습니다.

배열-포인터 변환의 동작 방식

배열-포인터 변환이 적용되면 배열은 해당 배열의 첫 번째 요소를 가리키는 포인터로 변환된다는 점에 유의해야 합니다. 따라서 "Hello"const char*로 변환되면, 그 포인터는 문자열의 첫 문자인 'H'를 가리키게 됩니다.

참고로, 문자열 리터럴을 수정하려는 시도는 정의되지 않은 동작(undefined behavior)을 유발할 수 있으므로, 항상 읽기 전용 데이터로 취급하는 것이 안전합니다.