//此代码的输出被观察为4 4 2?我不明白为什么它是2为ptr3?请帮忙
#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;
}
Run Code Online (Sandbox Code Playgroud)
near,far和huge指针是非标准的.
在支持它们的实现中(通常用于非常旧的x86系统),内存中的特定位置可以由段和偏移量指定.甲near指针只包含一个偏移,离开段隐含的.因此,它比far指针需要更少的空间.
现代编译器不使用任何这些关键字.我建议你找一个更新的编译器; 有很多免费的.
有关更多信息,请参阅此问题.
顺便提一下,printf的"%d"格式需要一个类型的参数int; sizeof产生类型的结果size_t,这是一种不同的类型.您可以将printf通话更改为:
printf("%d, %d, %d\n", (int)sizeof ptr1, (int)sizeof ptr2, (int)sizeof ptr3);
Run Code Online (Sandbox Code Playgroud)
(现代的方法是:
printf("%zu, %zu, %zu\n", sizeof ptr1, sizeof ptr2, sizeof ptr3);
Run Code Online (Sandbox Code Playgroud)
但支持near和far指针的实现可能不够现代,无法支持"%zu",这是在C99中引入的.)