Pointeurs en C: Différence entre les deux déclarations

Que signifient les déclarations suivantes en C:

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

D’après ce que je comprends, la première déclaration est un pointeur de type pointeur jusqu’à présent? Et le second est un pointeur sur un pointeur de type far?

far n’est pas un mot-clé standard en C, sa signification exacte et sa sémantique dépendent donc du compilateur. En général, cela s’applique aux architectures de mémoire segmentées dans lesquelles un pointeur «éloigné» peut pointer en dehors du segment actuel et un pointeur «proche» uniquement dans le segment. De nos jours, vous faites probablement du développement intégré si vous devez vous soucier de telles choses.

En ce qui concerne vos exemples de syntaxe, l’emplacement du qualificatif far diffère d’un compilateur à l’autre. Certains compilateurs l’utilisent de la même manière que const (c’est-à-dire qu’il se place du côté droit du * quand il fait référence à ce pointeur), mais de nombreux compilateurs populaires le placent plutôt du côté gauche, comme s’il faisait référence aux données et non au pointeur. . Cela semble être le cas dans votre exemple, ce qui ferait du premier ( char far *far * ) un pointeur éloigné vers un pointeur éloigné. Mais second ( char far far** ) serait alors un pointeur non qualifié (proche, si tel est le comportement par défaut) vers un pointeur “far far”. Personnellement, je ne suis pas au courant d’un compilateur qui a un tel concept, et devinerais que l’autre est soit redondant, soit une erreur, mais, comme dit, ceci n’est pas standard. Peut-être que certains compilateurs implémenteront un «énorme» pointeur aussi far far