【发布时间】:2015-02-16 09:13:44
【问题描述】:
这是一个c程序
#include<stdio.h>
main()
{
int(*p)[3][4];
printf("size of p= %d",sizeof(p));
printf("size of *p= %d",sizeof(*p));
return 0;
}
我可以理解 (*p) 的大小应该是数组的总大小,在这种情况下是 48 个字节。 但是 gcc 版本 4.2.1 给出了 p = 8 的大小。 为什么?
【问题讨论】:
-
据我所知,在 64 位机器上指针的大小始终为 8 个字节,因为它存储一个大小为 8 个字节的地址。
-
你真的想知道为什么 sizeof(p) 是 8 吗?那么@user2225104 的回答是正确的。如果您想知道为什么
sizeof(*p)是 8,那么您并不孤单。为什么不贴示例程序运行终端输出? -
我的回答总是正确且切中要害。只有一些缺乏文本阅读技巧并投票否决他们;)
-
附带说明,有多种 x64 内存模型。不同的操作系统选择不同的型号。虽然在 x64 上,指针的大小始终为 64 位,但操作系统选择的内存模型决定了 int 和 long 的大小。此外,这取决于 CPU,实际使用了 64 个地址位中的多少。
-
@Samik 谢谢。我忘了我是在 64 位系统上工作的。