什么时候指针的大小等于 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时间。)
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时间。)