char * var之间的区别 和char * var;?
只是想知道是否有任何区别:
char* var; char *var;
还是只是一个偏好(间距)的问题?
在这种情况下没有区别。 不过,你应该更喜欢char *var; 。
这是因为*与variables名称更紧密相关,而不是基本types的一部分 。 例如,如果你这样做:
char* a, b;
你有什么是a指针, char和b ,一个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的函数的指针? 该语言将解决这个与其他原型相同,但我们的目标是可读性,这意味着正确地传达我们对人类的意义 ,而不仅仅是编译器。
没有区别,只是你自己说的一个偏好问题