>백엔드 개발 >C++ >문자열 리터럴 `sizeof`, `const char* const` 및 `const char[]`의 차이점은 무엇입니까?

문자열 리터럴 `sizeof`, `const char* const` 및 `const char[]`의 차이점은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-02 17:19:10664검색

What's the Difference Between `sizeof` a String Literal, a `const char* const`, and a `const char[]`?

문자열 리터럴 크기: 차이점 풀기

다음 코드 조각을 고려하세요.

#include <iostream>
using namespace std;

int main()
{
    const char* const foo = "f";
    const char bar[] = "b";
    cout << "sizeof(string literal) = " << sizeof("f") << endl;
    cout << "sizeof(const char* const) = " << sizeof(foo) << endl;
    cout << "sizeof(const char[]) = " << sizeof(bar) << endl;
}

이 코드를 실행하면 다음이 드러납니다. 흥미로운 results:

sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2

결과 이해

  • sizeof("f"): 이는 다음을 포함하므로 2로 평가됩니다. 문자 'f'와 종료 널 문자 ''.
  • sizeof(foo): foo는 포인터이므로 sizeof(foo)는 32비트 시스템에서는 4를 반환하고 64비트 시스템에서는 8을 반환합니다. 이는 포인터가 가리키는 문자열이 아니라 포인터 자체의 크기를 나타냅니다.
  • sizeof(bar): bar는 'b'와 'b'라는 두 문자의 배열이므로 이 표현식은 2를 반환합니다. ''.

문자열 리터럴 유형 해석

sizeof는 문자열 리터럴에 필요한 공간을 계산하지만 기본 유형은 변경하지 않습니다. 문자열 리터럴은 계속해서 'const char의 크기 N 배열' 유형을 가지며, 여기서 N은 종료 null 문자를 나타냅니다.

배열 대 포인터 동작

배열이 sizeof로 전달될 때 포인터로 붕괴되지 않는다는 점에 유의하는 것이 중요합니다. 즉, sizeof(bar)는 배열에 대한 포인터의 크기가 아니라 배열 자체의 크기를 반환합니다.

결론

요약하면 sizeof(" f")는 널 문자를 포함하여 문자열 리터럴에 필요한 공간을 반환합니다. 그러나 sizeof(foo) 및 sizeof(bar)는 관련된 유형 차이로 인해 다르게 동작합니다. C 프로그래밍에서 문자열 리터럴을 사용할 때 이러한 뉘앙스를 이해하는 것이 필수적입니다.

위 내용은 문자열 리터럴 `sizeof`, `const char* const` 및 `const char[]`의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.