À mon avis, la réponse est LES DEUX, selon la situation. Généralement, l'OMI, il est préférable de mettre l'astérisque à côté du nom du pointeur, plutôt que le type. Comparez par exemple:
int *pointer1, *pointer2; // Fully consistent, two pointers
int* pointer1, pointer2; // Inconsistent -- because only the first one is a pointer, the second one is an int variable
// The second case is unexpected, and thus prone to errors
Pourquoi le deuxième cas est-il incohérent? Parce que par exemple int x,y;
déclare deux variables du même type mais le type n'est mentionné qu'une seule fois dans la déclaration. Cela crée un précédent et un comportement attendu. Et int* pointer1, pointer2;
est incompatible avec cela car il se déclare pointer1
comme un pointeur, mais pointer2
est une variable entière. Clairement sujet aux erreurs et, par conséquent, doit être évité (en plaçant l'astérisque à côté du nom du pointeur, plutôt que du type).
Cependant , il existe certaines exceptions où vous ne pourrez peut-être pas placer l'astérisque à côté d'un nom d'objet (et où cela importe où vous le mettez) sans obtenir un résultat indésirable - par exemple:
MyClass *volatile MyObjName
void test (const char *const p) // const value pointed to by a const pointer
Enfin, dans certains cas, il peut être plus clair de placer l'astérisque à côté du nom du type , par exemple:
void* ClassName::getItemPtr () {return &item;} // Clear at first sight