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

时间:2014-10-10 06:10:30

标签: c pointers sizeof

当我这样做时

int k = 9;
printf("sizeof k: %zu \n", sizeof (&k));

我的尺寸为8。但是当我做的时候

printf("pointer to k: %p \n", &k);

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

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

3 个答案:

答案 0 :(得分:8)

你的逻辑是,如果我写

printf("%d", 4); 

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

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

答案 1 :(得分:3)

即使最高有效位为零,指针仍占用8个字节。

虽然可以通过消除不需要的字节来“优化”数据存储,但数据访问会变得更加复杂和效率降低。阅读有关计算机内存中数据对齐的内容。

答案 2 :(得分:1)

前导零没有意义,因为地址是无符号的,前2个字节是零,因此不打印。 您可以修改格式说明符以打印前导零。