为什么大多数C程序员这样命名变量:

int *myVariable;

而不是像这样:

int* myVariable;

两者都成立。在我看来,星号是类型的一部分,而不是变量名的一部分。有人能解释一下这个逻辑吗?


当前回答

因为当你有这样的声明时更有意义:

int *a, *b;

其他回答

如果你从另一个角度来看,*myVariable是int类型,这是有意义的。

当你在一个语句中初始化和赋值一个变量时,例如:

int *a = xyz;

将xyz的值赋给a,而不是*a。这使得

int* a = xyz;

一个更一致的符号。

因为当你有这样的声明时更有意义:

int *a, *b;

它们是完全相等的。 然而,在

int *myVariable, myVariable2;

显然,myVariable的类型是int*,而myVariable2的类型是int。 在

int* myVariable, myVariable2;

很明显,两者都是int*类型,但这是不正确的,因为myVariable2的类型是int。

因此,第一种编程风格更直观。

因为这一行中的*与变量的绑定比与类型的绑定更紧密:

int* varA, varB; // This is misleading

正如@Lundin在下面指出的,const增加了更多需要考虑的微妙之处。你可以通过每行声明一个变量来完全避免这个问题,这永远不会有歧义:

int* varA;
int varB;

清晰的代码和简洁的代码之间的平衡是很难实现的——十几行冗余的int a;也不好。不过,我还是默认每行声明一次,并担心以后组合代码的问题。