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
的函数的指针? 该语言将解决这个与其他原型相同,但我们的目标是可读性,这意味着正确地传达我们对人类的意义 ,而不仅仅是编译器。
没有区别,只是你自己说的一个偏好问题