>백엔드 개발 >C++ >문자열 리터럴, 포인터 및 문자 배열에 대해 `sizeof`가 다른 결과를 생성하는 이유는 무엇입니까?

문자열 리터럴, 포인터 및 문자 배열에 대해 `sizeof`가 다른 결과를 생성하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-01 06:28:15830검색

Why Does `sizeof` Produce Different Results for String Literals, Pointers, and Character Arrays?

문자열 리터럴의 크기

주어진 코드는 다양한 유형의 문자열 상수에 sizeof 연산자를 사용하는 방법을 보여줍니다. 출력에서는 문자열 리터럴의 크기인 sizeof("f")가 문자열 리터럴에 대한 포인터의 크기(sizeof(foo))와 문자 배열의 크기(sizeof(bar)와 다르다는 것을 보여줍니다. )).

sizeof가 문자열 리터럴의 길이를 계산하는 이유는 무엇입니까?

sizeof 연산자는 다음을 계산합니다. 피연산자의 크기(바이트)입니다. 문자열 리터럴의 경우 피연산자는 종료 null(' ') 문자를 포함하여 해당 문자 배열 표현입니다. 이는 'f' 및 ' ' 문자를 설명하는 sizeof("f")에 대한 2의 출력을 설명합니다.

sizeof에 제공될 때 문자열 리터럴의 유형이 다른가요?

아니요. 문자열 리터럴의 유형은 const char[N]입니다. 여기서 N은 종료 null 문자를 포함한 문자열의 길이입니다. 그러나 문자열 리터럴을 sizeof 연산자에 전달하면 문자열을 문자에 대한 포인터 유형인 const char* 유형의 표현식으로 처리합니다. 이것은 32비트 시스템의 포인터 크기인 sizeof(foo)에 대한 4의 출력을 설명합니다.

추가 사항:

  • 배열은 sizeof로 전달될 때 포인터로 붕괴되지 않습니다. 이는 bar가 상수 문자 배열이므로 sizeof(bar)에 대한 2의 출력을 설명합니다.
  • sizeof에 대한 문자열 리터럴 인수 유형이 결과에 영향을 미칩니다. 예를 들어 피연산자가 const char* 유형의 표현식이기 때문에 sizeof("foo" 1)는 32비트 시스템과 64비트 시스템 모두에서 4를 반환합니다.

위 내용은 문자열 리터럴, 포인터 및 문자 배열에 대해 `sizeof`가 다른 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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