포인터는 일부 데이터를 찾을 수있는 메모리 주소입니다. sizeof() 연산자를 사용하여 포인터 변수의 크기를 찾을 수 있습니다. 그래서 그것의 크기는 무엇을 가리키는 지에 달려 있지 않습니다. 그러나 메모리 주소가 32 비트 컴파일러의 경우 4이고 64 비트 컴파일러의 경우 8입니다.
우리가 포인터를 선언 한 경우
두 번 J, J의 유형은 배정, 즉 "두 배로 포인터"입니다.
퍼센트의 p는 포인터를 인쇄하기위한 올바른 형식 지정자입니다. % p를 출력 주소
때때로 % u 및 % x (16 진수 형식의 부호없는 정수) 지정자를 사용하여 포인터 변수를 인쇄합니다.그러나 % x 또는 % u 인수에 대한 포인터를 전달하는 것은 정의되지 않은 동작입니다.
그러나 코드 블록과 같은 32 비트 컴파일러에서 작동합니다. 서명되지 않은 int 크기와 포인터가 여기에 동일하기 때문입니다. (양쪽 모두 4 바이트)
int와 포인터가 같은 너비를 갖는다 고 가정하는 것은 허위입니다 .x64에서 실행되는 GCC 64 비트와 MSVC 64 비트의 경우 sizeof (void *) == 8 인 반면 sizeof (unsigned int) == 4. 일부 아키텍처에서는 포인터와 int가 같은 크기, 예를 들어 PDP-11/34a 또는 요즘 대부분의 32 비트 아키텍처에서 발생합니다. 그러나이 아키텍처에 의존하는 코드를 작성하는 것은 현명하지 않습니다. .
가
당신은 다음과 같이 추가로 2 줄을 추가하고 확인 할 수 :
의 printf을 (를 sizeof (서명 int)를 "서명되지 않은 INT의 크기가 % 루 \ 없음입니다"); 의 printf ("포인터의 크기는 % lu \ n ", sizeof (int *));
비트 운영 체제와 64 비트 GCC의 시스템에서 617,451,515,
,이 (x는 부호없는 정수로 포인터를 캐스트) 각각에게 32 GCC는 64 비트 머신 %에
4, 8을 주어야한다 비트 길이). 포인터의 크기는 8 바이트 (64 비트) 길이입니다. % p로 인쇄하면 전체 포인터가 64 비트 크기로 인쇄됩니다. 그러나 % x로 인쇄 할 때 하위 32 비트 만 인쇄됩니다. 따라서 항상 % p 포인터를 인쇄하는 것이 안전합니다.
% x은 어떻습니까? 그것은 16 진수 – Lee
잘못 배웠습니다 : % p – Soren
코드를 참조하십시오. –