157 votes

Déclaration de pointeurs ; astérisque à gauche ou à droite de l'espace entre le type et le nom ?

Duplicatas possibles :
Qu'est-ce qui est le plus logique - char* string ou char *string ? Déclarations de pointeurs en C++ : placement de l'astérisque

J'ai vu des versions mixtes de ce principe dans de nombreux codes. (Les gens semblent déclarer les pointeurs de deux façons, et je n'ai aucune idée de laquelle est la bonne, ni même si cela a de l'importance.

La première méthode consiste à placer l'astérisque à côté du nom du type, comme suit :

someType* somePtr;

La seconde méthode consiste à placer l'astérisque à côté du nom de la variable, comme suit :

someType *somePtr;

Cela me rend fou depuis un certain temps. Existe-t-il une manière standard de déclarer les pointeurs ? La façon dont les pointeurs sont déclarés a-t-elle une quelconque importance ? J'ai déjà utilisé les deux déclarations, et je sais que le compilateur ne se soucie pas de la façon dont ils sont déclarés. Cependant, le fait que j'ai vu des pointeurs déclarés de deux manières différentes me laisse penser qu'il y a une raison derrière tout cela. Je suis curieux de savoir si l'une ou l'autre méthode est plus lisible ou logique d'une manière qui m'échappe.

145voto

Tyler McHenry Points 35551

C'est une question de préférence et une sorte de guerre sainte, tout comme le style de l'orthèse.

Le style "C++

someType* somePtr;

met l'accent sur le type de la variable pointeur. Il dit, en substance, "le type de somePtr est un pointeur vers someType ".

Le style "C

someType *somePtr;

met l'accent sur le type de données pointées. Il dit, en substance, "le type de données pointées par somePtr es 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 "focalisé", pour ainsi dire, sur les données pointées ou sur la variable du pointeur.

En le plaçant au milieu (comme someType * somePtr ) tente d'éviter de s'engager dans l'un ou l'autre.

133voto

Cela n'a pas d'importance. Quelqu'un va venir clore la question en disant qu'il s'agit d'une supercherie, et quelqu'un d'autre va montrer comment la question a été résolue. int* a se brise si vous déclarez plusieurs variables dans les mêmes déclarations alors que int *a reflète mieux la structure syntaxique du code, et une autre montrera que Stroustrup préfère le code int* a et maintient les caractères ensemble sur le côté gauche.

Il y a beaucoup d'opinions, mais il n'y a pas de "bonne" façon de faire.

67voto

Brian R. Bondy Points 141769

Peu importe, il s'agit d'une préférence personnelle.

Certaines personnes préfèrent garder le type ensemble :

int* p;

D'autres disent qu'il devrait être placé à 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.

Avec le temps, vous finirez par l'oublier et accepter les deux variantes.

34voto

Lance Diduck Points 685

La différence s'explique par le fait que C++ a ajouté un élément plus fort, le système de type au dessus de C.


Style C

Un programmeur C pense généralement en termes de "valeurs".

int  *pValue;

se lit comme suit : "le déréférence de pValue est un int ".

Style C++

Alors qu'un programmeur C++ pense en termes de "types", donc

int* pValue;

se lit comme suit : "le type de pValue est pointeur sur int ".


Le compilateur ne voit bien sûr aucune différence. Cependant, vous constaterez que ce sont les programmeurs C qui insistent sur la "sémantique des valeurs" lorsqu'ils programment en C++.

23voto

dteoh Points 1931

Je pense qu'il est plus clair de mettre l'astérisque à côté du nom de la variable.

Vous pourriez déclarer par erreur someType* one, two; en pensant qu'il s'agit de deux pointeurs, mais seule la variable one est un pointeur ; two n'est qu'un someType . Déclarer comme someType *one, *two évite ce problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X