Doublons possibles:
Qu'est-ce qui a plus de sens - chaîne char * ou chaîne char *?Déclarations de pointeur en C++: placement de l'astérisque
J'ai vu des versions mixtes de ceci dans beaucoup de code. Soit dit en passant, cela s'applique au C et au C++. Les gens semblent déclarer les pointeurs de deux manières différentes, et je ne sais pas lequel est correct, même s'il a de l'importance.
La première façon de placer l'astérisque à côté du nom du type, comme ceci:
someType* somePtr;
La deuxième façon est de mettre l'astérisque à côté du nom de la variable, comme suit:
someType *somePtr;
Cela me rend fou depuis quelque temps. Existe-t-il un moyen standard de déclarer des pointeurs? La façon dont les pointeurs sont déclarés importe-t-elle même? J'ai déjà utilisé les deux déclarations auparavant et je sais que le compilateur ne se soucie pas de savoir comment. Cependant, le fait d'avoir vu des pointeurs déclarés de deux manières différentes m'amène à penser qu'il y a une raison derrière cela. Je suis curieux de savoir si l'une ou l'autre méthode est plus lisible ou logique d'une manière qui me manque.
C'est une question de préférence, et une sorte de guerre sainte, tout comme le style brace.
Le style
someType* somePtr;
souligne le type de la variable de pointeur. Il dit essentiellement "le type de somePtr
est un pointeur sur someType
".
Le style
someType *somePtr
met l'accent sur le type des données pointées. Il dit essentiellement "le type de données pointé par somePtr
est someType
".
Les deux signifient la même chose, mais cela dépend si le modèle mental d'un programmeur donné lors de la création d'un pointeur est "concentré", pour ainsi dire, sur les données pointées ou la variable pointeur.
Le mettre au milieu (comme someType * somePtr
) essaie d'éviter de s'engager envers l'un ou l'autre.
Ça n'a pas d'importance. Quelqu'un va maintenant venir et fermer la question comme une dupe, et quelqu'un d'autre va montrer comment le int* a
Way rompt si vous déclarez plusieurs variables dans les mêmes déclarations alors que le int *a
Way reflète mieux la structure syntaxique du code, et un autre gars montrera que Stroustrup préfère le int* a
façon.
Beaucoup d'opinions, mais pas de "bonne" façon ici.
Peu importe, c'est la préférence personnelle.
Certaines personnes aiment garder le type ensemble:
int* p;
D'autres personnes disent qu'il devrait passer à côté de la variable pour les raisons suivantes:
int *p, x;//declare 1 int pointer and 1 int
int *p, *x;//declare 2 int pointers.
Au fil du temps, vous allez simplement oublier et accepter les deux variantes.
La différence est due au fait que C++ a ajouté un système de type plus puissant au-dessus de C. Un programmeur C pense généralement en termes de "valeurs", donc
int *pValue;
lit "le dereference de pValue est un int" alors qu'un programmeur C++ pense en "types" donc
int* pValue;
lit "le type pValue est un pointeur sur int" Bien sûr, le compilateur ne voit aucune différence. Cependant, vous constaterez que ce sont les programmeurs C qui insistent sur la "sémantique des valeurs" lors de la programmation en C++.
Je pense que mettre l'astérisque à côté du nom de la variable est plus clair.
Vous pourriez déclarer par erreur someType* one, two;
pensant qu'il s'agit de deux pointeurs, mais que seule la variable one
est un pointeur; two
n'est qu'un someType
. Déclarant comme someType *one, *two
évite ce problème.