> 백엔드 개발 > C++ > C에서 `sizeof`는 문자열 리터럴, 배열 및 포인터를 어떻게 다르게 처리합니까?

C에서 `sizeof`는 문자열 리터럴, 배열 및 포인터를 어떻게 다르게 처리합니까?

Linda Hamilton
풀어 주다: 2024-12-07 09:03:13
원래의
154명이 탐색했습니다.

How Does `sizeof` Differently Handle String Literals, Arrays, and Pointers in C  ?

문자열 리터럴 크기: 문자열 상수의 메모리 공간 이해

C에서 문자열 리터럴은 코드의 필수 부분으로 고정된 시퀀스를 나타냅니다. 문자의. sizeof 연산자는 이러한 문자열 리터럴의 메모리 할당과 레이아웃을 이해하는 데 중요한 역할을 합니다.

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

"f"와 같은 문자열 리터럴에 적용될 때 sizeof 연산자는 종료 null 문자를 포함하여 리터럴에 저장된 문자 수를 측정합니다. (' '). "f"의 경우 'f'와 null 종결자가 모두 포함되어 있으므로 두 문자를 저장하는 데 필요한 공간을 계산합니다.

질문 2: 문자열 리터럴이 다른가요? sizeof?에 주어진 경우의 유형

문자열 리터럴에는 고유한 유형이 있습니다. 즉, 크기가 알려진 문자 배열로, 크기에 null이 포함됩니다. 터미네이터. 이 유형은 char*(문자에 대한 포인터) 및 char[](문자 배열)과 다릅니다. sizeof에 전달되면 문자열 리터럴의 배열 유형이 유지되므로 포인터의 크기가 아닌 배열의 크기를 반영하는 결과가 나옵니다.

sizeof가 문자열 리터럴에 대해 다른 값을 반환하는 이유 , 배열 및 포인터?

  • sizeof("f"): 그대로 2를 반환합니다. 'f' 및 ''가 포함된 문자 배열의 크기를 측정합니다.
  • sizeof(foo): 측정에 따라 4(32비트 시스템) 또는 8(64비트 시스템)을 반환합니다. 문자열 리터럴의 주소를 보유하는 포인터 변수 foo의 크기.
  • sizeof(bar): 문자 배열의 크기를 측정하므로 2를 반환합니다. 'b' 및 ''을 포함합니다.

기억하세요:

  • 문자열 리터럴의 유형은 다음과 같습니다. const char 크기 N의 배열(여기서 N null 종결자를 포함합니다).
  • 배열이 전달될 때 포인터로 붕괴되지 않습니다. sizeof.

위 내용은 C에서 `sizeof`는 문자열 리터럴, 배열 및 포인터를 어떻게 다르게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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