在C / C ++中声明指针variables的正确方法

我注意到有些人使用下面的符号来声明指针variables。

(a) char* p; 

代替

 (b) char *p; 

我用(b)。 符号(a)的理性是什么? 符号(b)对我更有意义,因为字符指针本身不是一个types。 相反,types是字符,variables可能是一个指向字符的指针。

 char* c; 

这看起来像有一个types的char *,variablesc是这种types。 但实际上,types是char和* c(由c指向的内存位置)是该types的(char)。 如果你一次声明多个variables,这个区别就变得很明显了。

 char* c, *d; 

这看起来很奇怪。 c和d都是指向一个字符的指针。 在这之后,下一个看起来更自然。

 char *c, *d; 

谢谢。

Bjarne Stroustrup说:

“int * p”之间的select 和“int * p” 不是关于是非,而是风格和重点。 C强调expression; 宣言往往被认为是一个必要的罪恶。 另一方面,C ++则强调types。

一个“典型的C程序员”写“int * p;” 并解释为“* p是什么是int”强调的语法,并可能指向C(和C ++)声明语法来争取风格的正确性。 事实上,*在语法中绑定到名字p。

一个“典型的C ++程序员”写“int * p;” 并解释为“p是指向int的指针”,强调types。 事实上,p的types是int *。 我清楚地喜欢这个重点,并认为它对于使用C ++的更高级部分非常重要。

来源: http : //www.stroustrup.com/bs_faq2.html#whitespace

我build议使用后一种风格,因为在一行(第四个例子)中声明多个指针的情况下,将variables的星号标记为您习惯的内容。

我个人比较喜欢把*和其余的types放在一起

 char* p; // p is a pointer to a char. 

人们会争论“但是,然后char* p, q;变成误导”,我说,“所以不要这样做”。

如何写就没有区别。 但是如果你想在一行中声明两个或更多的指针,可以使用(b)variables,因为它清楚你想要什么。 看下面:

 int *a; int* b; // All is OK. `a` is pointer to int ant `b` is pointer to int char *c, *d; // We declare two pointers to char. And we clearly see it. char* e, f; // We declare pointer `e` and variable `f` of char type. // Maybe here it is mistake, maybe not. // Better way of course is use typedef: typedef char* PCHAR; PCHAR g, h; // Now `g` and `h` both are pointers. // If we used define construction for PCHAR we'd get into problem too. 

妥协是

 char * p; 

K&R使用

 char *p; 

除非你遵循编码标准,否则这取决于你,在这种情况下,你应该遵循别人的做法。

这都是一个偏好的问题,我个人在项目上看到char *我倾向于在不同的行上声明多个指针。 没有真正的“正确”的方式来做到这一点,这一切都归结于优先。 有些人说,阅读(a)比较容易,而其他人则说(b)更容易在同一行上声明更多的相同types的variables。

我发现(b)更为常见,在某些情况下,我也看到了

 char * a; 

或者类似的东西 再次优先。 不pipe你喜欢什么,或者我正在使用的项目是什么,我都会使用(除非我自己写,在这种情况下我使用(a))