9
votes

Est-ce qu'il importe où je place l'astérisque lorsque je déclare des pointeurs en C ++?

Je suis juste en train d'apprendre C ++ et de tout l'exemple du code que j'ai examiné ces derniers jours, j'ai eu du mal à comprendre où le pointeur doit être placé.

Quelle est la différence dans ces 3? xxx

ou xxx

merci pour votre aide.


3 commentaires

Vous avez oublié char * w ;-)


@Fred que le style de codage donne des maux de tête de Bjarne Stroustrup. :)


Il y a aussi Typedef Char * Char_ptr; Char_ptr w; ...


3 Réponses :


16
votes

il n'y a pas de différence. Ils sont exactement les mêmes.

Vous pouvez choisir de l'écrire comme vous le souhaitez. Typiquement, les programmeurs C ++ placent l'astérisque à côté du type , tandis qu'il est plus courant que les programmeurs C puissent placer l'astérisque à côté du nom de la variable . .

Le seul piège à prendre conscience est lorsque vous déclarez plusieurs variables sur une seule ligne (que vous ne devriez vraiment pas faire de toute façon, si ce n'est pour cette raison précisément). Par exemple, dans la déclaration suivante, seule la variable x est déclarée sous forme de pointeur: xxx

comparer celui avec ce qui suit, ce qui en fait beaucoup plus Effacer quelles variables sont des pointeurs: xxx

au mieux que je peux dire, la troisième syntaxe a émergé comme un mauvais compromis entre les deux options principales. Au lieu de placer l'astérisque à côté de l'un ou de l'autre, quelqu'un a décidé de le placer au milieu, ce qui concerne le seul endroit qu'il fait décidément pas appartient.


5 commentaires

Personnellement, j'utilise la troisième syntaxe pour la même raison pour laquelle je mets des espaces entre les mots lors de l'écriture anglais, mais c'est juste moi.


@Mike: C'est une perspective intéressante et une personne que je n'ai jamais envisagée. Aussi controversée que l'argument, c'est quelle l'information du pointeur modifie, je n'ai jamais vu l'argument selon lequel c'est un élément d'information sémantique (un "mot") tout seul, parfaitement capable de rester seul .


Je n'ai jamais vu l'argument selon lequel WhitSpace a une signification au-delà de la séparation des jetons, le cas échéant, et la mise en place de code d'une manière agréable à l'auteur. Certaines personnes semblent insister sur la lecture d'un sens sémantique profond, cependant.


Personnellement, j'utilise la première syntaxe pour la même raison pour laquelle j'appuie un "s" pour les pluriels en anglais. La façon dont vous écrivez reflète la façon dont vous pensez au code et que certains moyens sont plus productifs que d'autres.


Pourrais-je voter pour marquer cela comme une réponse? L'auteur de la question semble abandonner Stackoverflow en 2011.



0
votes

algough * code> est parfois placé à côté de la variable qu'elle appartient vraiment à la déclaration de type. Donc ce qui suit: xxx pré>

signifie vraiment p> xxx pré>

identique va avec & code>. De plus, * code>, const code> et & code> sont appliqués dans l'ordre de leur proximité avec le type déclaré. Par exemple: P>

const SomeType const x = ...;


4 commentaires

(Détypte *) x; ne peut être interprété qu'en tant que déclaration d'expression contenant une expression détruite, elle ne peut pas être une déclaration, donc votre "vraiment signifie" n'est pas correcte.


@CHARLES Eh bien, j'ai écrit la remarque à ce sujet de ne pas être une déclaration de type valide. Peut-être que ce n'est pas un bon moyen de le phraser.


Ok, j'ai peut-être mal compris ce que vous vouliez dire.


@Chals j'ai édité ma réponse. Enlevé le bit problématique et ajouté encore plus d'informations en place pour la rendre plus utile.



2
votes

Aucune différence, mais vous devez faire attention que si vous écrivez:

x = new (char);
*x = 'a';
y = 'b';


0 commentaires