为什么大多数C程序员这样命名变量:
int *myVariable;
而不是像这样:
int* myVariable;
两者都成立。在我看来,星号是类型的一部分,而不是变量名的一部分。有人能解释一下这个逻辑吗?
为什么大多数C程序员这样命名变量:
int *myVariable;
而不是像这样:
int* myVariable;
两者都成立。在我看来,星号是类型的一部分,而不是变量名的一部分。有人能解释一下这个逻辑吗?
当前回答
在这里,我要大胆地说,对于变量声明以及参数和返回类型,这个问题都有一个直接的答案,那就是名称后面应该有星号:int *myVariable;。要理解其中的原因,看看如何在C语言中声明其他类型的符号:
Int my_function(Int arg);对于一个函数;
为数组浮动my_array[3]。
一般的模式,被称为声明遵循使用,是一个符号的类型被分为名称前的部分和名称周围的部分,而名称周围的这些部分模仿了你用来获得左侧类型值的语法:
Int a_return_value = my_function(729);
浮动an_element = my_array[2];
and: int copy_of_value = *myVariable;
c++在引用方面遇到了麻烦,因为使用引用的语法与值类型的语法是相同的,所以你可能会说c++采取了与C不同的方法。另一方面,c++在指针的情况下保留了与C相同的行为,所以引用在这方面确实是一个奇怪的例子。
其他回答
如果你从另一个角度来看,*myVariable是int类型,这是有意义的。
它们是完全相等的。 然而,在
int *myVariable, myVariable2;
显然,myVariable的类型是int*,而myVariable2的类型是int。 在
int* myVariable, myVariable2;
很明显,两者都是int*类型,但这是不正确的,因为myVariable2的类型是int。
因此,第一种编程风格更直观。
当你在一个语句中初始化和赋值一个变量时,例如:
int *a = xyz;
将xyz的值赋给a,而不是*a。这使得
int* a = xyz;
一个更一致的符号。
因为当你有这样的声明时更有意义:
int *a, *b;
这只是个人喜好的问题。
当您阅读代码时,在第二种情况下,区分变量和指针更容易,但是当您将同一类型的变量和指针放在一行中时,可能会导致混淆(项目指南通常不鼓励这样做,因为这会降低可读性)。
我更喜欢在类型名旁边声明指针的对应符号,例如。
int* pMyPointer;