可能重复:
是否有任何平台指向不同类型的指针具有不同的大小?
我在几个地方读到不同类型的指针在符合标准的 C 实现中可能有不同的表示。这是需要将指针参数强制转换为 printf 的一件事,例如
int foo;
printf("address is %p\n", (void *) &foo);
我对此持怀疑态度,并浏览了 C99 标准(文档 WG14 N1256,可在http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf获得)。在 6.2.5.27 中写道:
指向 void 的指针应具有与指向字符类型的指针相同的表示和对齐要求。类似地,指向兼容类型的合格或不合格版本的指针应具有相同的表示和对齐要求。所有指向结构类型的指针都应具有彼此相同的表示和对齐要求。所有指向联合类型的指针都应具有彼此相同的表示和对齐要求。 指向其他类型的指针不需要具有相同的表示或对齐要求。
因此,听起来确实像符合 C99 的实现可以对不同类型的指针使用不同的表示。
我的问题是:存在哪些 C 实现/架构实际上对不同类型的指针使用不同的表示?