int* p正确还是int *p正确
二者都是正确的,因为二者在C 和C++中都是有效的,而且意义完全一样。就语言的定义与相关的编译器来说,我们还可以说“int*p”或者“int * p”。
在“int* p”和“int *p”之间的选择与正确或错误无关,而只关乎风格与侧重点。C侧重表达式;对声明往往比可能带来的问题考虑得更多。另一方面,C++则非常重视类型。
一个“典型的C 程序员”写成“int *p”,并且解释说“*p 表示一个什么样的int”以强调语法,而且可能指出C(与C++)的语法来证明这种风格的正确性。是的,在语法上*被绑定到名字p 上。
一个“典型的C++程序员”写成“int* p”,并且解释说“p 是一个指向int 的指针类型”以强调类型。是的,p 是一个指向int 的指针类型。我明确地倾向于这种侧重方向,而且认为对于学好更多的高级C++这是很重要的。
严重的混乱(仅仅)发生在当人们试图在一条声明中声明几个指针的时候:
int* p, p1; // 也许是错的:p1 不是一个int*
把*放到名字这一边,看来也不能有效地减少这种错误:
int *p, p1; // 也许是错的?
为每一个名字写一条声明最大程度地解决了问题——特别是当我们初始化变量的时候。人们几乎不会这样写:
int* p = &i;
int p1 = p; // 错误:int 用一个int*初始化了
如果他们真的这么干了,编译器也会指出。
在“int* p”和“int *p”之间的选择与正确或错误无关,而只关乎风格与侧重点。C侧重表达式;对声明往往比可能带来的问题考虑得更多。另一方面,C++则非常重视类型。
一个“典型的C 程序员”写成“int *p”,并且解释说“*p 表示一个什么样的int”以强调语法,而且可能指出C(与C++)的语法来证明这种风格的正确性。是的,在语法上*被绑定到名字p 上。
一个“典型的C++程序员”写成“int* p”,并且解释说“p 是一个指向int 的指针类型”以强调类型。是的,p 是一个指向int 的指针类型。我明确地倾向于这种侧重方向,而且认为对于学好更多的高级C++这是很重要的。
严重的混乱(仅仅)发生在当人们试图在一条声明中声明几个指针的时候:
int* p, p1; // 也许是错的:p1 不是一个int*
把*放到名字这一边,看来也不能有效地减少这种错误:
int *p, p1; // 也许是错的?
为每一个名字写一条声明最大程度地解决了问题——特别是当我们初始化变量的时候。人们几乎不会这样写:
int* p = &i;
int p1 = p; // 错误:int 用一个int*初始化了
如果他们真的这么干了,编译器也会指出。