指针的大小与printf的表示不同?

use*_*607 3 c pointers sizeof

当我做

int k = 9;
printf("sizeof k: %zu \n", sizeof (&k));
Run Code Online (Sandbox Code Playgroud)

我得到的大小8.但是,当我这样做

printf("pointer to k: %p \n", &k);
Run Code Online (Sandbox Code Playgroud)

我得到0x7fff57e3ba24.我可以看到这是12个十六进制数字,这意味着(因为1个十六进制是4位)指针占用48位,即6个字节.

问题:为什么sizeof打印8指针虽然只有6个字节?

Arm*_*yan 8

你的逻辑是,如果我写

printf("%d", 4); 
Run Code Online (Sandbox Code Playgroud)

它打印1个十进制数字,可能存储在1个字节中,然后sizeof(int)必须是1个字节.

数字0x7fff57e3ba240x00007fff57e3ba24.相同.仅仅因为数字恰好比类型可以存储的数字少,并不意味着它占用的空间更少.