声明指针; 星号在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;