声明指针; 星号在types和名称之间的空格的左侧或右侧?

可能重复:
什么更有意义 – char *string或char *string? C ++中的指针声明:放置星号

我见过很多代码的混合版本。 (顺便说一下,这也适用于C和C ++)。人们似乎用两种方式之一来声明指针,而我不知道哪一个是正确的,哪怕是重要的。

第一种将星号放在types名称旁边的方法如下:

someType* somePtr; 

第二种方法是把星号放在variables的名字旁边,如下所示:

 someType *somePtr; 

一段时间以来,这一直令我疯狂。 有没有任何标准的方式来声明指针? 这是甚至重要的是如何宣布指针? 我之前使用过这两个声明,而且我知道编译器并不关心它是哪一种。 但是,我看到了以两种不同方式进行指示的事实,这使我相信这背后有一个原因。 我很好奇,如果任何一种方法更可读或逻辑性,我失踪了。

这是一个偏好的问题,有点神圣的战争,就像支架风格。

样式

 someType* somePtr; 

正在强调指针variables的types。 它实质上是说“ somePtr的types是指向somePtr的指针”。

样式

 someType *somePtr 

强调指出的数据的types。 它实质上是说“ somePtr指向的数据types是someType ”。

它们都意味着同样的事情,但这取决于给定的程序员在创build指针时的心智模式是否“聚焦”,也就是说,指向数据或指针variables。

把它放在中间(如someType * somePtr )正试图避免承诺任何一个。

没关系。 现在有人会把这个问题当作一个愚蠢的问题来讨论,而另外一个人将会展示int* a方法是如何在同一个声明中声明多个variables的,而int *a方法更好地反映了代码的语法结构,另一个人会表明Stroustrup更喜欢int* a方式。

许多意见,但在这里没有“正确”的方式。

没关系,这是个人喜好。

有些人喜欢保持这种types:

 int* p; 

其他人说,它应该在variables旁边,因为以下几点:

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

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

不同之处在于C ++在C之上增加了一个更强的types系统.AC程序员通常以“值”的方式来思考

 int *pValue; 

读取“pValue的解引用是一个int”,而C ++程序员则认为是“types”

 int* pValue; 

读取“typespValue是指向int的指针”编译器当然没有任何区别。 但是你会发现,当用C ++编程时,C程序员坚持“价值语义”。

我认为把星号旁边的variables的名称更清晰。

你可能会错误地声明一些someType* one, two; 认为他们都是指针,但只有variables是指针; two只是一个someType 。 声明为someType *one, *two避免了这个问题。

我见过的每一种方式都是

 TheType *myPointer 

因为你正在声明一个types为TheType的POINTER。 类似的声明

 TheType myVar 

将声明一个types为TheType的实例variables。

你也可以明确地做到这一点,并使其易读

 TheType myVar, *myPointer;