放置星号最合适的方法是什么?为什么呢?
1) type* var;
2) type *var;
答案 0 :(得分:23)
只要您声明一个指针就没关系。它通常写在第二个例子中(在我通常读/写的代码中),但对于编译器它是相同的。
如果要声明多个指针,可能会出现问题。例如,这不是声明两个指针,而是声明一个指针和一个类型类型的var。
type* var1, var2;
你需要改为:
type* var1, *var2;
我更喜欢使用* by var。
答案 1 :(得分:6)
指针是类型,我认为对类型信息进行分组是最有意义的:
int* foo;
如果在同一行定义了多个变量,这可能会导致混淆:
int* foo, bar; // foo will be int*, bar will be int
解决这个问题的方法是,永远不要在同一行上声明几个变量。无论如何,Code Complete提倡的东西。
答案 2 :(得分:4)
两者都有效。我认为#1> 一般更清晰,但在C中误导,可能导致错误,例如:
type* var1, var2;
// This actually means:
type *var1;
type var2;
所以我会说#2在C语言中更具惯用性,因此建议使用,特别是如果你不是唯一一个编写代码的程序员(当然,除非你们都同意一种风格)。
答案 3 :(得分:3)
正如其他人所指出的,两者都运作良好,而错误的运作实际上具有句法经济的优势。
我看待它的方式,声明包含类型,后跟变量。
<type> <variable>;
int ii;
int* pii;
所以,如果你拿走变量,剩下的就是类型。以上是 int 和 int * 。编译器将 int * 视为内部类型(指向int的指针)。
遗憾的是,C不能无缝地支持这种语法。在声明相同类型的多个变量时,您应该能够这样做:<type> <variable>, <variable>, <variable>;
你不能使用指针类型:
int* ii1, ii2, ii3;
声明类型为 int * 的ii1,其余类型为 int 。为了避免这种情况,我养成了每行只声明一个变量的习惯。
答案 4 :(得分:2)
我听说它在技术上认为*是变量的修饰符, 这可以通过在多变量中多次使用*来证明 声明 例如。 int * p,* q,* r;
但是我喜欢将它视为基类型的修饰符,因为那样 就是原型中出现的东西。 例如。 void func(int *);
.PMCD。
PS。我知道我没有帮助你解决问题:)
答案 5 :(得分:1)
第二种模式是正确的。对于新手程序员来说,另一种模式并不是那么清楚。 通常不鼓励形式int *变量
答案 6 :(得分:1)
声明语义遵循表达式语义(特别是运算符优先级),我发现使用第二种样式更容易阅读更复杂的声明。
你可以想到
int *foo;
将表达式*foo
的类型(即应用于foo
的间接运算符)声明为int
而不是foo
被声明为int *
类型}。
无论你选择哪种惯例,都要尽量保持一致。
答案 7 :(得分:0)
没有一个“最合适的地方”。
通常它是其余代码使用的地方。
如果您从一开始就编写自己的代码并可以选择自己的约定:选择自己的约定并坚持下去。
如果您选择type * var
以外的其他内容,您将遇到'尴尬'的情况:
/* write these with another style */
int * var;
int const * var;
int * restrict var;
<子> PS。这应该没关系,但我通常使用type *var;
答案 8 :(得分:0)
这可能是编码员的偏好。
对我而言,我通过以下方式声明指示:
int * var1, var2;
其中var1
是指针,var2
不是。如果要在一行中声明多个指针:
int * var1, * var2;
当然,使用其他方式是有效的。