在这种情况下没有区别。但是,您应该更喜欢char *var;
.
这是因为*
与变量名关联更紧密,并且是不是基本类型的一部分。例如,如果您这样做:
char* a, b;
你拥有的是a
, 一个指向 - 的指针char
, and b
, a char
。这很令人困惑!自从*
性格更接近char
关键字,我们期望两个变量的类型都是指针到-char
,但是*
实际上是关联的only with a
。 (这类似于char a[10], b;
正如 teppic 在评论中指出的那样;这[10]
说明符同样只与a
,所以只有a
将是一个数组。)
正确的声明是:
char *a, *b;
把*
靠近变量的说明符意味着当您intend一个变量是指针而另一个不是:
char *a, b;
在这种情况下,很明显b
无意成为指针。在原来的例子中(char* a, b;
),我们不知道程序员是否有意b
成为一个指针。借用 Douglas Crockford 的话来说,我们所知道的是程序员是无能的。
有些人喜欢在前后加一个空格*
:
char * a, * b;
This falls prey to the same problem illustrated above: if b
is not a pointer then the declaration (char * a, b;
) may also lead to uncertainty about the programmer's intent. Therefore I suggest not placing a space between the *
and the variable name1.
不管你怎么看,char* var;
应被视为不良风格。根据语言规范,它在语法上是正确的,但会导致代码不可读,因为它appears来表明*
说明符是同一声明中所有变量共享的类型的一部分(如果不是)。 (这类似于在同一行上编写一个复杂的函数——它可以工作,但这是一个坏主意。在某些情况下,可读性和可维护性会取代个人的风格偏好,这就是其中之一。)
1Personally, I prefer to put a space after the *
only when dealing with function return values:
char * foo();
这是明确的:它是一个返回指针的函数char
.
char *foo();
程序员的意思是返回一个指针的函数吗?char
,或者他的意思是创建一个指向返回的函数的指针char
?该语言会将其解析为与其他原型相同,但我们的目标是可读性,这意味着准确传达我们的意思humans,不仅仅是编译器。