À 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 pointer1comme un pointeur, mais pointer2est 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