На мій погляд, відповідь - ОБИН, залежно від ситуації. Як правило, IMO, краще ставити зірочку поруч з ім'ям вказівника, а не над типом. Порівняйте, наприклад:
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
Чому другий випадок суперечливий? Тому що, наприклад, int x,y;
оголошує дві змінні одного типу, але тип згадується лише один раз у оголошенні. Це створює прецедент та очікувану поведінку. І int* pointer1, pointer2;
несумісний з цим, оскільки він оголошує pointer1
як покажчик, але pointer2
є цілою змінною. Очевидно схильний до помилок і, отже, його слід уникати (ставлячи зірочку поруч із іменем вказівника, а не типом).
Однак є деякі винятки, коли вам не вдасться поставити зірочку поруч із назвою об'єкта (і де це важливо, куди ви його ввели), не отримавши небажаних результатів - наприклад:
MyClass *volatile MyObjName
void test (const char *const p) // const value pointed to by a const pointer
Нарешті, в деяких випадках може бути безперечно зрозуміліше поставити зірочку поруч із назвою типу , наприклад:
void* ClassName::getItemPtr () {return &item;} // Clear at first sight