是否有标准指针大小声明?

elm*_*rco 3 c standards struct pointers

我有结构填充char(哎呀,我的坏).我想减去一个指针大小.您知道标准指针大小声明,还是标准宏?

nmi*_*els 8

sizeof (void *)


Ste*_*sop 8

你想要C标准的答案,或者答案几乎一直都有效吗?

通常,所有指向数据的指针都是相同的大小,即sizeof(void*).

但是,由于您标记了"C"和"标准",请注意C标准不要求这样做.我认为这是POSIX所要求的,并且在Win32上也是如此,并且没有一个常见的现代架构具有涉及不同大小指针的指令.你有不同大小的指针的一个场景是带有"near"和"far"指针的分段内存架构,当然在任何给定的实现中,其中只有一个可以是C中的"普通"指针.另一种情况是,理论上指针int可以比指针小2位char,如果int总是4对齐的话.如果内存空间是64MB,则可能意味着int*适合2个字节,而a char*void*需要3个.sizeof(int*) < sizeof(char*).

因此,为了清晰和保证正确性,如果p是指针则其大小为sizeof p.

正如Steve Townsend在他的评论中所说,如果你问另一个关于你的代码的问题,你可能会解决你的真正问题.知道指针的大小并没有直接告诉你关于包含指针的结构的布局.