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

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

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

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

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

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