声明指针; 在类型和名称之间的空格的左边或右边加星号?

可能的复制品:
什么更有意义-char * string 还是 char * string? C + + 中的指针声明: 星号的位置

我在很多代码中看到过这种情况的混合版本。(顺便说一下,这适用于 C 和 C + + 。)人们似乎以两种方式声明指针,我不知道哪一种是正确的,甚至不知道它是否重要。

将星号放在类型名称旁边的第一种方法,如下所示:

someType* somePtr;

第二种方法是将星号放在变量名称的旁边,如下所示:

someType *somePtr;

这事已经让我抓狂一段时间了。有没有声明指针的标准方法?指针如何声明重要吗?我以前使用过这两种声明,我知道编译器不在乎它是哪种方式。然而,我看到指针以两种不同的方式声明,这一事实使我相信其背后是有原因的。我很好奇,这两种方法是否在某种程度上更具可读性或逻辑性。

87573 次浏览

没关系,这是个人偏好。

有些人喜欢把类型放在一起:

int* p;

其他人说它应该放在变量旁边,因为下面是:

int *p, x;//declare 1 int pointer and 1 int
int *p, *x;//declare 2 int pointers.

随着时间的推移,你会忽略这一点,并接受这两种变化。

我见过的每一种方式都是

TheType *myPointer

因为您声明的指针类型为 TheType

TheType myVar

会宣布一个 TheType 类型的实例变量。

你也可以清楚地做到这一点,并有它很容易阅读

TheType myVar, *myPointer;

这是一个偏好的问题,有点像一场圣战,就像支撑风格一样。

“ C + +”风格

someType* somePtr;

强调指针变量的类型。它实质上是说“ somePtr的类型是指向 someType的指针”。

C 风格

someType *somePtr;

强调指向数据的类型。它实际上是在说“ somePtr指向的数据类型是 someType”。

它们的意思是一样的,但这取决于给定程序员在创建指针时的思维模型是否“集中”,也就是说,集中在指向数据或指针变量上。

把它放在中间(就像 someType * somePtr一样)是为了避免承诺使用其中任何一个。

这不重要。现在会有人出现,以欺骗的方式结束这个问题,还有人会展示,如果你在同一个声明中声明多个变量,而 int *a更好地反映了代码的语法结构,那么 int* a方式是如何被打破的,还有一个人会展示,Stroustrup 更喜欢 int* a方式,并将类型放在左边。

很多意见,但没有“正确”的方式。

我认为把星号放在变量名的旁边会更清楚。

您可能会错误地声明 someType* one, two;,认为它们都是指针,但是只有变量 one是指针; two只是 someType。声明为 someType *one, *two可以避免这个问题。

之所以出现这种差异,是因为 C + + 在 C 之上添加了一个更强大的 打字系统


C 风格

C 语言程序员通常是从“值”的角度来考虑问题的,所以

int  *pValue;

读取“ pValue 的 解除参照Int”。

C + + 风格

而一个 C + + 程序员却用“类型”思考

int* pValue;

读取“ pValue 的 类型指向 int 的指针”。


当然,编译器根本看不出有什么不同。然而,您会发现,在 C + + 中编程时,坚持“价值语义”的是 C 程序员。