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

时间:2016-03-10 10:28:26

标签: c pointers size

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

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

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

2 个答案:

答案 0 :(得分:2)

您是否正在使用Turbo C编译器?

指针和int的大小在Windows 32位机器上的Turbo C编译器中是2个字节。因此指针的大小是编译器特定的。但通常大多数编译器都支持32位中的4字节指针变量和64位机器中的8字节指针变量

答案 1 :(得分:2)

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

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

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

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

相关问题