>백엔드 개발 >C++ >C의 포인터는 가리키는 데이터 유형에 관계없이 고정된 크기를 갖습니까?

C의 포인터는 가리키는 데이터 유형에 관계없이 고정된 크기를 갖습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-13 18:02:10342검색

Do Pointers in C   Have a Fixed Size Regardless of the Data Type They Point To?

C의 포인터 크기 이해

"포인터의 크기는 포인터가 가리키는 유형의 크기에 따라 달라지나요?"라는 질문이 생깁니다. , 아니면 포인터가 항상 고정된 크기를 유지합니까?" 중복 질문을 토대로 이 개념을 자세히 살펴보겠습니다.

C에서 포인터는 일반적으로 고정된 크기를 갖습니다. 32비트 실행 파일에서는 일반적으로 32비트를 차지합니다. 그러나 이전 버전의 Windows에서는 16비트와 32비트 포인터를 구별해야 하는 등의 예외가 있습니다.

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

int x = 10;
int *xPtr = &x;
char y = 'a';
char *yPtr = &y;

std::cout << sizeof(x) << "\n";
std::cout << sizeof(xPtr) << "\n";
std::cout << sizeof(y) << "\n";
std::cout << sizeof(yPtr) << "\n";

이에서 시나리오의 출력은 다음과 같습니다.

  • sizeof(x): 변수의 크기를 출력합니다. x, 이는 32비트 실행 파일의 경우 4입니다(int가 4바이트라고 가정).
  • sizeof(xPtr): 포인터 변수 xPtr의 크기를 출력합니다. 그것이 가리키는 유형.
  • sizeof(y): 문자 변수 y의 크기를 출력합니다. 이는 일반적으로 단일 문자의 경우 1바이트입니다. 문자.
  • sizeof(yPtr): xPtr과 유사하며 xPtr과 동일한 포인터 변수 yPtr의 크기를 출력합니다.

포인터가 일반적으로 일정한 크기를 가지므로 코드에서 이 가정에 의존하는 것은 현명하지 않습니다. 프로그램이 특정 크기의 포인터에 의존하는 경우 항상 명시적으로 확인하십시오.

함수 포인터는 주목할 만한 예외입니다. 크기는 특정 시스템이나 컴파일러에서 사용하는 호출 규칙에 따라 달라질 수 있습니다. 함수 포인터에 대한 추가 정보는 'Jens'가 제공한 응답을 참조하세요.

위 내용은 C의 포인터는 가리키는 데이터 유형에 관계없이 고정된 크기를 갖습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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