> 백엔드 개발 > C++ > C에서 `sizeof`가 문자열 리터럴, 포인터 및 배열에 대해 다른 값을 반환하는 이유는 무엇입니까?

C에서 `sizeof`가 문자열 리터럴, 포인터 및 배열에 대해 다른 값을 반환하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-30 20:40:17
원래의
929명이 탐색했습니다.

Why Does `sizeof` Return Different Values for String Literals, Pointers, and Arrays in C  ?

문자열 리터럴 크기

C에서 sizeof는 데이터 유형이나 표현식의 크기를 계산합니다. 문자열 리터럴에 적용될 때 sizeof는 종료 null 문자(' ')를 포함하여 리터럴의 길이를 계산합니다.

출력 이해

제공된 코드는 다음을 계산합니다. 문자열 리터럴, const char* const 및 const char[]의 크기. GCC로 컴파일된 32비트 OS의 출력은 다음과 같습니다.

sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2
로그인 후 복사

sizeof가 문자열 리터럴의 길이를 계산하는 이유

sizeof("f")는 평가합니다. 문자열 리터럴은 문자 'f'와 종료 null로 구성되므로 2로 변경됩니다.

표현식의 크기 유형

  • 문자열 리터럴 "f"는 null 종결자를 포함하여 const char의 크기 2 배열입니다.
  • 포인터 foo는 const char* const이며, 이는 const char를 가리키며 그 자체입니다. const.
  • 배열 막대는 'b'와 null 종결자를 포함하는 크기 2의 const char[]입니다.

주의 사항: 배열 크기

배열은 sizeof로 전달될 때 포인터로 붕괴되지 않습니다. 따라서 sizeof(bar)는 포인터 크기(32비트 OS의 경우 4) 대신 2를 올바르게 반환합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿