Déclarer des pointeurs; astérisque à gauche ou à droite de l’espace entre le type et le nom?

Dupliqués possibles:
Qu’est-ce qui fait plus de sens – char * ssortingng ou char * ssortingng? Déclarations de pointeur en C ++: placement de l’astérisque

J’ai vu des versions mixtes de ceci dans beaucoup de code. (Cela vaut également pour C et C ++.) Les gens semblent déclarer des pointeurs de deux manières différentes et je ne sais pas du tout ce qui est correct, ou même si c’est important.

La première façon de mettre l’astérisque adjacent au nom du type, comme ceci:

someType* somePtr; 

La deuxième façon consiste à placer l’astérisque à côté du nom de la variable, comme ceci:

 someType *somePtr; 

Cela me rend fou depuis un certain temps maintenant. Existe-t-il un moyen standard de déclarer des pointeurs? Est-ce important de savoir comment les pointeurs sont déclarés? J’ai utilisé les deux déclarations auparavant et je sais que le compilateur ne se soucie pas de la manière dont il est. Cependant, le fait d’avoir vu des pointeurs déclarés de deux manières différentes m’amène à croire qu’il y a une raison à cela. Je suis curieux de savoir si l’une des méthodes est plus lisible ou logique d’une manière qui me manque.

C’est une question de préférence et de guerre sainte, tout comme le style des accolades.

Le style

 someType* somePtr; 

met l’accent sur le type de la variable de pointeur. Il dit essentiellement que “le type de somePtr est un pointeur sur un someType “.

Le style

 someType *somePtr 

met l’accent sur le type de données pointées. Il dit essentiellement que “le type de données indiqué par somePtr est someType “.

Ils signifient tous deux 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 “focalisé”, pour ainsi dire, sur les données pointées ou la variable de pointeur.

Le mettre au milieu (comme someType * somePtr ) tente d’éviter de s’engager dans l’un ou l’autre.

Cela n’a pas d’importance. Quelqu’un viendra et finira la question en dupe, et quelqu’un d’autre montrera comment le chemin int* a brise si vous déclarez plusieurs variables dans les mêmes déclarations alors que le chemin int *a reflète mieux la structure syntaxique du code, et un autre gars montrera que Stroustrup préfère le mode int* a .

Beaucoup d’opinions, mais pas de “bonne” manière ici.

Ce n’est pas grave, c’est la préférence personnelle.

Certaines personnes aiment garder le type ensemble:

 int* p; 

D’autres personnes disent que cela devrait aller à côté de la variable en raison de ce qui suit:

 int *p, x;//declare 1 int pointer and 1 int int *p, *x;//declare 2 int pointers. 

Au fil du temps, vous ne ferez que passer outre et acceptez les deux variantes.

La différence est due au fait que C ++ a ajouté un système de type plus fort au-dessus de C. Les programmeurs AC pensent généralement en termes de «valeurs», donc

 int *pValue; 

lit “la 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” Le compilateur ne voit aucune différence du tout. Cependant, vous constaterez que c’est le programmeur C qui insiste 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’ils sont tous deux des pointeurs mais que la seule variable est un pointeur; two est juste un someType . Déclarer someType *one, *two évite ce problème.

Chaque façon que j’ai vu est

 TheType *myPointer 

car vous déclarez un POINTER de type TheType. Déclaration similaire

 TheType myVar 

serait déclarer une variable d’instance de type TheType.

Vous pouvez également le faire clairement et le rendre facilement lisible

 TheType myVar, *myPointer;