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;
所以,如果你拿掉变量 ,剩下的就是类型 。 哪个是int和int *以上。 编译器将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
。
无论您选择什么样的惯例,只要尽量保持一致。