Je sais pas si c'est une vraie question ou rhétorique (histoire de signaler un cas où la syntaxe est en effet peu claire), mais au cas où, je vais y répondre. :-)
int* i,j;
i est un pointeur sur entier, j est un entier. C'est je pense la raison pour laquelle beaucoup de projets vont plutôt écrire l'étoile à côté de la variable, non à côté du type, pour qu'on voit bien à quelle variable cela s'associe:
int *i, j;
Enfin si tu voulais avoir 2 pointeurs, tu écrirais:
int *i, *j;
Note que je n'écris dorénavant plus jamais de déclaration de cette sorte, car je trouve en effet cela abscons, et je me posais aussi la question à une époque (jusqu'à ce qu'un jour, je teste). Maintenant je déclare une variable par ligne, même si c'est le même type. Je trouve cela plus clair de cette façons. Au moins, plus de question. :-)
const char *p' vs 'char * const p'.
Ça a l'air d'un cas différent, mais c'est en fait très similaire à ce que tu as au dessus (en gros), c'est à dire que tu dois associer le '*' avec ce qu'il y a après. const char *p -> tu as d'un côté const char, de l'autre p. Donc ça signifie que p est un pointeur sur const char. Le pointeur lui-même n'est pas constant (tu peux changer la valeur de p autant que tu veux). Mais la valeur pointée par p elle ne peut pas changer (tu peux cependant faire repointer vers une autre valeur différente, ce qui a un résultat similaire). char * const p -> d'un côté char, de l'autre const p. Cela signifie donc que p est un pointeur sur un char (variable). Tu peux changer cette valeur pointée (le char) autant que tu veux, par contre, tu ne peux plus jamais changer le pointeur p lui-même après son initialisation.
C'est compliqué, mais faut s'y retrouver avec des associations de ce genre.
Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]
[^] # Re: ...
Posté par Jehan (site web personnel, Mastodon) . En réponse au journal int *(*(*foo[])(int))(float*);. Évalué à 10. Dernière modification le 13 septembre 2014 à 15:47.
Je sais pas si c'est une vraie question ou rhétorique (histoire de signaler un cas où la syntaxe est en effet peu claire), mais au cas où, je vais y répondre. :-)
iest un pointeur sur entier,jest un entier. C'est je pense la raison pour laquelle beaucoup de projets vont plutôt écrire l'étoile à côté de la variable, non à côté du type, pour qu'on voit bien à quelle variable cela s'associe:Enfin si tu voulais avoir 2 pointeurs, tu écrirais:
Note que je n'écris dorénavant plus jamais de déclaration de cette sorte, car je trouve en effet cela abscons, et je me posais aussi la question à une époque (jusqu'à ce qu'un jour, je teste). Maintenant je déclare une variable par ligne, même si c'est le même type. Je trouve cela plus clair de cette façons. Au moins, plus de question. :-)
Ça a l'air d'un cas différent, mais c'est en fait très similaire à ce que tu as au dessus (en gros), c'est à dire que tu dois associer le '*' avec ce qu'il y a après.
const char *p-> tu as d'un côtéconst char, de l'autrep. Donc ça signifie que p est un pointeur sur const char. Le pointeur lui-même n'est pas constant (tu peux changer la valeur depautant que tu veux). Mais la valeur pointée parpelle ne peut pas changer (tu peux cependant faire repointer vers une autre valeur différente, ce qui a un résultat similaire).char * const p-> d'un côtéchar, de l'autreconst p. Cela signifie donc que p est un pointeur sur un char (variable). Tu peux changer cette valeur pointée (le char) autant que tu veux, par contre, tu ne peux plus jamais changer le pointeur p lui-même après son initialisation.C'est compliqué, mais faut s'y retrouver avec des associations de ce genre.
Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]