C - 指针的初始化,星号位置

时间:2010-11-17 09:23:29

标签: c

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

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

9 个答案:

答案 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;

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