C – 指针初始化,星号位置

可能重复:
C ++中的指针声明:星号的放置

放置星号最合适的方法是什么? 为什么?

1) type* var; 2) type *var; 

只要你声明一个指针就没关系。 它通常写在第二个例子中(在我通常读/写的代码中),但对于编译器它是相同的。

如果要声明多个指针,则可能会出现问题。 例如,这不是声明两个指针,而是声明一个指针和一个类型类型的var。

 type* var1, var2; 

你需要改为:

 type* var1, *var2; 

我更喜欢总是使用*。

指针是类型,我认为将类型信息分组是最有意义的:

 int* foo; 

如果在同一行上定义了多个变量,这可能会导致混淆:

 int* foo, bar; // foo will be int*, bar will be int 

对此的解决方案是,永远不要在同一行上声明几个变量。 无论如何, Code Complete提倡的东西。

两者都有效。 我认为#1通常更清晰,但在C中误导并可能导致错误,例如:

 type* var1, var2; // This actually means: type *var1; type var2; 

所以我会说#2在C中比较惯用,因此建议使用,特别是如果你不是唯一一个编写代码的程序员(当然,除非你们都同意一个风格)。

正如其他人所指出的那样,两者都运作良好,而错误的运作实际上具有句法经济的优势。

我看待它的方式,声明由类型后跟变量组成

  ; int ii; int* pii; 

所以,如果你拿掉变量 ,剩下的就是类型 。 哪个是intint *以上。 编译器将int *视为内部类型(它是指向int的指针 )。

遗憾的是,C不能无缝地支持这种语法。 声明同一类型的多个变量时,您应该能够这样做:

  , , ; 

你不能用指针类型:

 int* ii1, ii2, ii3; 

声明类型为int *的 ii1,其余为int类型。 为了避免这种情况,我习惯于每行只声明一个变量。

我听说它在技术上认为*是变量的修饰符,这可以通过在多变量声明中多次使用*来certificate,例如。 int * p,* q,* r;

但是我喜欢将它视为基类型的修饰符,因为这是原型中出现的。 例如。 void func(int *);

.PMCD。

PS。 我知道我没有帮你解决问题:)

第二种模式是正确的。 对于新手程序员来说,另一种模式并不那么明确。 通常不鼓励使用form * *变量

这更像是编码员的偏好。

对我来说,我通过以下方式声明指针:

 int * var1, var2; 

其中var1是指针,而var2不是。 如果要在一行中声明多个指针:

 int * var1, * var2; 

当然,使用其他方式是有效的。

没有一个“最合适的地方”。

通常它是其余代码使用的地方。

如果您从一开始就编写自己的代码并可以选择自己的约定:选择自己的约定并坚持使用它。

如果您选择type * var以外的其他内容,您将遇到“尴尬”的情况:

 /* write these with another style */ int * var; int const * var; int * restrict var; 

PS。 这应该没关系,但我通常使用type *var;

声明语义遵循表达式语义(特别是运算符优先级),我发现使用第二种样式更容易阅读更复杂的声明。

你可以想到

 int *foo; 

将表达式*foo (即应用于foo间接运算符)的类型声明为int而不是声明为int *类型的foo

无论您选择什么样的惯例,只要尽量保持一致。