char * var之间的区别 和char * var;?

只是想知道是否有任何区别:

char* var; char *var; 

还是只是一个偏好(间距)的问题?

在这种情况下没有区别。 不过,你应该更喜欢char *var;

这是因为*与variables名称更紧密相关,而不是基本types的一部分 。 例如,如果你这样做:

 char* a, b; 

你有什么是a指针, charb ,一个char 。 这很混乱! 由于*字符更接近于char关键字,因此我们期望这两个variables的types都是指向char指针,但是*实际上a关联。 (这与char a[10], b;类似char a[10], b;正如注释中的teppic所指出的那样; [10]说明符同样只与a相关,所以只有a将是一个数组。

正确的声明是:

 char *a, *b; 

*说明符放在variables的附近意味着当你打算把一个variables作为一个指针而另一个variables不是时,很容易看到发生了什么。

 char *a, b; 

在这种情况下,显然b不是一个指针。 在原始示例( char* a, b; )中,我们不知道程序员是否打算将b作为指针。 从Douglas Crockford借来的,我们所知道的只是程序员是无能的。

有些人喜欢在*之前和之后放一个空格:

 char * a, * b; 

这就是上面所说的同样的问题:如果b不是指针,那么声明( char * a, b; )也可能导致程序员意图的不确定性。 所以我build议不要在*和variables名1之间放一个空格。

任何你看它的方式, char* var; 应该被视为不好的风格。 根据语言规范,它在语法上是正确的,但会导致不可读的代码,因为它似乎表明*说明符是同一声明中所有variables共享的types的一部分,而不是。 (就像在同一行写一个复杂的函数一样 – 它是有效的,但是这是一个糟糕的主意,有些情况下可读性和可维护性取代了个人的风格偏好,这就是其中之一)。


1我个人更喜欢在处理函数返回值的时候在*之后加一个空格:

 char * foo(); 

这是毫不含糊的:它是一个返回指向char的函数。

 char *foo(); 

程序员的意思是返回一个指向char的函数,还是他的意思是创build一个指向返回char的函数的指针? 该语言将解决这个与其他原型相同,但我们的目标是可读性,这意味着正确地传达我们对人类的意义 ,而不仅仅是编译器。

没有区别,只是你自己说的一个偏好问题