« ptr est de type "int *", soit pointeur sur int. »
Et bien, justement, non! C'est *ptr qui est du type int. Bon en fait, c'est un peu une question de goût et de couleur, mais cette façon de voir les choses les simplifie grandement quand on passe à des déclarations plus compliquées.
Dans le cas de déclaration pour un cast ou un argument de fonction, comme (int *), il faut s'imaginer qu'il existe un nom de variable qui a été omis dans l'expression, sachant qu'il ne pourrait de toutes façons n'apparaitre qu'à un seul endroit.
Je conseille vivement la lecture de la section 5.12 du K&R qui donne moult détails ainsi même qu'un programme pour mieux comprendre les déclaration compliquées. En voici un extrait :
char**argv;// argv: pointer to charint(*daytab)[13];// daytab: pointer to array[13] of intint*daytab[13];// daytab: array[13] of pointer to intvoid*comp();// comp: function returning pointer to voidvoid(*comp)();// comp: pointer to function returning voidchar(*(*x())[])();// x: function returning pointer to array[] of pointer to function returning charchar(*(*x[3])())[5];// x: array[3] of pointer to function returning pointer to array[5] of char
Un autre extrait de la section A.8.8 :
« For example, [example below] name respectively the types "integer", "pointer to integer", "array of 3 pointers to integers", "pointer to an unspecified number of integers", "function of unspecified parameters returning pointer to integer", and "array, of unspecified size, of pointers to functions with no parameters each returning an integer". »
[^] # Re: dans une déclaration de type le * s'applique à l'identifiant de gauche
Posté par calandoa . En réponse au message L'opérateur unaire * me laisse perplexe (pointeurs sur fonctions principalement). Évalué à 3.
« ptr est de type "int *", soit pointeur sur int. »
Et bien, justement, non! C'est
*ptrqui est du typeint. Bon en fait, c'est un peu une question de goût et de couleur, mais cette façon de voir les choses les simplifie grandement quand on passe à des déclarations plus compliquées.Dans le cas de déclaration pour un cast ou un argument de fonction, comme
(int *), il faut s'imaginer qu'il existe un nom de variable qui a été omis dans l'expression, sachant qu'il ne pourrait de toutes façons n'apparaitre qu'à un seul endroit.Je conseille vivement la lecture de la section 5.12 du K&R qui donne moult détails ainsi même qu'un programme pour mieux comprendre les déclaration compliquées. En voici un extrait :
Un autre extrait de la section A.8.8 :
« For example, [example below] name respectively the types "integer", "pointer to integer", "array of 3 pointers to integers", "pointer to an unspecified number of integers", "function of unspecified parameters returning pointer to integer", and "array, of unspecified size, of pointers to functions with no parameters each returning an integer". »