내 컴퓨터 에서이 코드를 컴파일 한 후 이상한 것을 발견했습니다.
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
int a,b,c,d;
int e,f,g;
long int h;
printf("The addresses are:\n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x",
&a,&b,&c,&d,&e,&f,&g,&h);
return 0;
}
결과는 다음과 같습니다. 모든 int 주소 사이에는 4 바이트의 차이가 있습니다. 그러나 마지막 int와 long int 사이에는 12 바이트 차이가 있습니다.
Hello, World!
The addresses are:
da54dcac
da54dca8
da54dca4
da54dca0
da54dc9c
da54dc98
da54dc94
da54dc88
sizeof
기능이 있습니다. printf("size: %d ", sizeof(long));
%x
. 운이 좋으면 플랫폼에서 올바르게 작동하여 형식 문자열이 예상되는 포인터 인수를 전달 unsigned int
하지만 포인터와 int의 크기는 많은 ABI에서 다릅니다. %p
휴대용 코드로 포인터를 인쇄하는 데 사용 합니다. (코드가 8 개 모두의 절반이 아닌 처음 4 개의 포인터의 상하 절반을 인쇄하는 시스템을 상상하기 쉽습니다.)
%zu
@ChrisSchneider 를 사용하십시오 . 주소를 인쇄하려면%p
@yoyo_fun 을 사용하십시오 . 잘못된 형식 지정자를 사용하면 정의되지 않은 동작이 발생합니다
int
후h
소스 코드입니다. 컴파일러는 이전에 공백에 넣을 수 있습니다h
.