什么时候指针的大小等于 2 个字节而不是 C 中的 4 个字节?

when is the size of a pointer equals 2 bytes not 4 in C?

int* p;
printf("%d", sizeof(p));

答案是4个字节! 我正在使用 C

如何声明一个大小为(2字节)的指针?它取决于编译器吗?据我所知,C 和 ansi C 是相同的..这在 ansi C 中会有所不同吗?

也许您使用的是 Turbo C 编译器?

指针和 int 的大小在 windows 32 位机器上的 Turbo C 编译器中是 2 个字节。所以指针的大小是特定于编译器的。但通常大多数编译器都实现了在 32 位机器上支持 4 字节指针变量和在 64 位机器上支持 8 字节指针变量

C 标准有意不指定指针的大小。

甚至 允许不同类型的指针大小不同:sizeof(type1*) 不一定与 sizeof(type2*) 相同!

这允许 C 将最规则的架构定位到最奇特的架构。

最后,您的程序行为是 未定义:您应该使用 %zu 作为 sizeof return 的格式化程序。 (请注意 sizeof(p) 定义的,尽管 p 未初始化 - 这是因为 sizeof(p)compile时间。)