//观察到此代码的输出为 4 4 2 ?我不明白为什么 ptr3 是 2?请帮忙
#include<stdio.h>
int main()
{
char huge *near *far *ptr1;
char near *far *huge *ptr2;
char far *huge *near *ptr3;
printf("%d, %d, %d\n", sizeof(ptr1), sizeof(ptr2), sizeof(ptr3));
return 0;
}
最佳答案
near
、far
和 huge
指针是非标准的。
在支持它们的实现中(通常用于非常老的 x86 系统),内存中的特定位置可以由段和偏移量指定。 near
指针仅包含一个偏移量,隐式保留该段。因此它比 far
指针需要更少的空间。
现代编译器不使用任何这些关键字。我建议你自己找一个更新的编译器;有很多免费的。
参见 this question获取更多信息。
顺便说一句,printf 的"%d"
格式需要一个int
类型的参数; sizeof
产生类型为 size_t
的结果,这是一种不同的类型。您可以将 printf
调用更改为:
printf("%d, %d, %d\n", (int)sizeof ptr1, (int)sizeof ptr2, (int)sizeof ptr3);
(现代的做法是:
printf("%zu, %zu, %zu\n", sizeof ptr1, sizeof ptr2, sizeof ptr3);
但是支持 near
和 far
指针的实现不太可能现代到足以支持 "%zu"
,这是在 C99 中引入。)
关于c - 为什么ptr3的大小是2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947272/