C中的指针:两个声明中的差异

时间:2014-07-15 09:02:19

标签: c pointers

C中的以下声明是什么意思:

char far *far *scr;
char far far** scr;

从我收集的第一个语句是指向远的类型指针的指针? 第二个是指向远类型指针的指针?

1 个答案:

答案 0 :(得分:1)

far不是C中的标准关键字,因此其确切含义和语义取决于编译器。通常,它适用于分段存储器架构,其中“远”指针可指向当前段之外,而“近”指针仅在段内。如果你需要担心这些事情,现在你可能正在进行嵌入式开发。

至于语法示例,far限定符的位置因编译器而异。有些编译器使用它类似于const(即,当它引用该指针时它位于*的右侧),但许多流行的编译器将它放在左侧,就像它引用数据而不是指针。在您的示例中似乎就是这种情况,这会使第一个(char far *far *)指向远指针的远指针。但是第二个(char far far**)将是一个非限定(接近,如果这是默认值)指向“远”指针。我个人并不知道编译器有这样一个概念,并猜测其他far是冗余的还是错误的,但是,如上所述,这是非标准的。也许某些编译器会将“巨大”指针实现为far far ...