指针的大小在C中何时等于2字节而不是4字节?

指针的大小在C中何时等于2字节而不是4字节?,c,pointers,size,C,Pointers,Size,答案是4个字节! 我用的是C 如何声明大小为(2字节)的指针?它依赖于编译器吗?据我所知,C和ansi C是一样的。。这在ansi C中会有所不同吗?也许您使用的是Turbo C编译器 在windows 32位计算机上的Turbo C编译器中,指针和int的大小为2字节。所以指针的大小是特定于编译器的。但一般来说,大多数编译器实现为支持32位的4字节指针变量和64位机器的8字节指针变量也许您使用的是Turbo C编译器 在windows 32位计算机上的Turbo C编译器中,指针和int的大小

答案是4个字节! 我用的是C


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

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


在windows 32位计算机上的Turbo C编译器中,指针和int的大小为2字节。所以指针的大小是特定于编译器的。但一般来说,大多数编译器实现为支持32位的4字节指针变量和64位机器的8字节指针变量

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


在windows 32位计算机上的Turbo C编译器中,指针和int的大小为2字节。所以指针的大小是特定于编译器的。但一般来说,大多数编译器实现为支持32位的4字节指针变量和64位机器的8字节指针变量。C标准故意不指定指针的大小

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

这允许C将最常规的体系结构定位到最奇特的体系结构


最后,您的程序行为是未定义的:您应该使用
%zu
作为
sizeof
返回的格式化程序。(请注意,
sizeof(p)
是在
p
未初始化的情况下定义的,这是因为
sizeof(p)
是在编译时计算的。)

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

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

这允许C将最常规的体系结构定位到最奇特的体系结构


最后,您的程序行为是未定义的:您应该使用
%zu
作为
sizeof
返回的格式化程序。(注意,
sizeof(p)
是在
p
未初始化的情况下定义的,这是因为
sizeof(p)
是在编译时计算的。)

它依赖于平台。在现代C中,正确的打印方式是
printf(“%zu\n”,sizeof(int*)
,则
sizeof
的返回值的类型不是
int
。这里真正的问题是:您(认为您)为什么需要一个2字节大小的指针?您可以使用
8086
paltform声明一个16位指针,并在
指针附近声明一个
指针;)@LPs:确实可以:+32767,它依赖于平台。在现代C中,正确的打印方式是
printf(“%zu\n”,sizeof(int*))
,则
sizeof
的返回值的类型不是
int
。这里真正的问题是:您(认为您)为什么需要一个2字节大小的指针?您可以使用
8086
paltform声明一个16位指针,并在
指针附近声明一个
指针;)@LPs:确实可以:+32767
int* p;
printf("%d", sizeof(p));