在我看来,答案都是根据情况而定。通常,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
为什么第二种情况不一致?因为eg 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