可能重复:
What makes more sense - char* string or char *string? Pointer declarations in C++: placement of the asterisk
我在很多代码中看到了这个的混合版本。 (顺便说一句,这适用于C和C ++。)人们似乎用两种方式之一来声明指针,我不知道哪一种是正确的,如果它甚至是重要的。
第一种方法是将星号放在类型名称旁边,如下所示:
someType* somePtr;
第二种方法是将星号放在变量名称旁边,如下所示:
someType *somePtr;
这已经让我疯了一段时间了。是否有任何标准方法来声明指针?甚至指针是如何声明的?我之前使用过两个声明,并且我知道编译器并不关心它是哪种方式。然而,事实上,我已经看到以两种不同的方式宣告指针,这让我相信它背后有一个原因。我很好奇,如果这两种方法在某些方面更具可读性或逻辑性,那我就错过了。
答案 0 :(得分:109)
没关系。如果你在同一个声明中声明多个变量,而int* a
方式更好地反映了int *a
方式的语法结构,那么现在有人会出现并将问题视为一个骗局。代码,另一个人会表明Stroustrup更喜欢int* a
方式。
许多意见,但这里没有“正确”的方式。
答案 1 :(得分:93)
这是一个偏好的问题,有点像圣战,就像大括号一样。
风格
someType* somePtr;
强调指针变量的类型。它本质上是说“somePtr
的类型是指针 - someType
”。
风格
someType *somePtr
强调指向数据的类型。它基本上是说“somePtr
指向的数据类型是someType
”。
它们都意味着相同的东西,但这取决于创建指针时给定程序员的心智模型是否“聚焦”,可以说是指向数据或指针变量。
将它放在中间(如someType * somePtr
)是试图避免提交任何一个。
答案 2 :(得分:51)
没关系,这是个人偏好。
有些人喜欢将这种类型保持在一起:
int* p;
其他人说它应该在变量旁边,因为以下内容:
int *p, x;//declare 1 int pointer and 1 int
int *p, *x;//declare 2 int pointers.
随着时间的推移,你会忽略这一点并接受这两种变化。
答案 3 :(得分:22)
差异的产生是因为C ++在C之上添加了一个更强大的类型系统.C程序员通常用“值”来思考,所以
int *pValue;
读取“pValue的取消引用是一个int” 而C ++程序员在“类型”中思考
int* pValue;
读取“类型pValue是指向int的指针” 编译器当然没有看到任何区别。但是你会发现在C ++编程时,C程序员坚持使用“价值语义”。
答案 4 :(得分:17)
我认为将星号放在变量名称旁边会更清楚。
您可能会错误地声明someType* one, two;
认为它们都是指针,但只有变量one
是指针; two
只是someType
。声明为someType *one, *two
可以避免此问题。
答案 5 :(得分:-4)
我见过的每一种方式都是
TheType *myPointer
因为您声明了类型为TheType的POINTER。类似的声明
TheType myVar
将声明一个类型为TheType的实例变量。
此外,您可以清楚地执行此操作并使其易于阅读
TheType myVar, *myPointer;