对于所有数据类型,所有数据指针在一个平台中的大小是否相同?

对于所有数据类型,所有数据指针在一个平台中的大小是否相同?

char*int*long*甚至是long long*同样大小的(在给定的平台)?


jeck猫
浏览 456回答 3
3回答

喵喔喔

它们不能保证大小相同,尽管在我经验丰富的平台上通常都是这样。C 2011 在线选秀:6.2.5类型... 28指针void应具有与指向字符类型的指针相同的表示和对齐要求。48)类似地,指向兼容类型的合格或非限定版本的指针应具有相同的表示和对齐要求。所有指向结构类型的指针都应具有相同的表示和对齐要求。所有指向union类型的指针都应具有相同的表示和对齐要求。指向其他类型的指针不需要具有相同的表示或对齐要求。48)相同的表示和对齐要求意味着可互换性作为函数的参数,函数的返回值和联合的成员。

翻过高山走不出你

不必要。该标准不保证sizeof(double*) == sizeof(int*)。例如,假设处理器具有两个具有不同宽度的地址总线(如在一些哈佛架构处理器上),它可以具有不同大小的指针。

不负相思意

请注意C标准所说的内容 - 正如John Bode所引用的那样。另请注意,C标准根本没有说明函数指针的大小。POSIX标准规定了一些额外的要求:2.12.3指针类型所有函数指针类型应与void指向的类型指针具有相同的表示形式。将函数指针转换为void *不得改变表示。这种转换产生的void *值可以使用显式转换转换回原始函数指针类型,而不会丢失信息。注意:ISO C标准不要求这样,但它是POSIX一致性所必需的。
打开App,查看更多内容
随时随地看视频慕课网APP