C ++中int * x和int * x之间有区别吗?

时间:2013-04-10 17:52:29

标签: c++ variables pointers naming-conventions declaration

我正在回到我的C ++研究中,并且真正试图理解基础知识。指针总是给我带来麻烦,我想确保在我继续操作之前就真的得到它并在路上感到困惑。

可悲的是,我一开始就被我正在阅读的教程中的不一致所困扰。有些人用这种方式做指针声明:

int *x

有些人这样做:

int* x

现在两者的前者似乎是迄今为止最常见的。这令人沮丧,因为第二个对我来说更有意义。当我读int * x时,我读到“这是一个int,它的名字是* x”,这是不对的。但是当我读到第二个时,我看到“这里是一个int指针,它的名字是x”,这非常准确。

所以,在我构建自己的心智图之前,两者之间是否存在功能差异?如果我是第二种方式,我会成为麻风病人吗?

感谢。

10 个答案:

答案 0 :(得分:15)

着名的Bjarne Stroustrup,以C ++的创建和开发而着称,说...

  

“int * p;”之间的选择和“int * p;”不是对的   错了,但关于风格和重点。 C强调表达;   声明通常被认为只是一种必要的邪恶。   另一方面,C ++非常重视类型。

     

“典型的C程序员”写“int * p;”并解释它“* p是什么   是int“强调语法,可能指向C(和C ++)   宣言语法争论风格的正确性。确实,   *绑定到语法中的名称p。

     

“典型的C ++程序员”写“int * p;”并解释它“p是一个   指向int“强调类型的指针。确实p的类型是int * .I   显然更喜欢强调,并认为它对使用   更高级的C ++部分。

所以,没有区别。它只是一种代码风格。

来自here

答案 1 :(得分:10)

对于编译器,它们具有完全相同的含义。

在风格上,有支持和反对的论据。

一个论点是第一个版本更可取,因为第二个版本:

int* x, y, z;

表示xyz都是指针,它们不是指针(只有x)。

第一个版本没有这个问题:

int *x, y, z;

换句话说,由于*绑定到变量名而不是类型,因此将它放在变量名旁边是有意义的。

反驳论证是不应该在同一声明中混合指针和非指针类型。如果不这样做,则上述参数不适用,将*放在int 旁边是有意义的,因为它是类型的一部分。

无论你决定订阅哪种思想流派,你都会在野外遇到这两种风格,还有更多(有些人写int * x)。

答案 2 :(得分:4)

完全没有区别。

这只是风格问题。

个人更喜欢这个:

int *x;

这个,

int* x;

因为当您在同一行上声明许多变量时,后者的可读性较差。例如,请看:

int* x, y, z;

此处x是指向int的指针,但也是yz指针? 看起来像它们是指针,但它们不是

答案 3 :(得分:3)

没有区别。我使用int* x表单是因为我更喜欢将所有类型组合在一起而不是名称,但是这种类型会因int (*x)[10]等更复杂的类型而崩溃。

有些人更喜欢int *x,因为您可以将其视为“取消引用x为您提供int”。但是当你开始使用引用类型时,即使这样也会分崩离析; int &x并不意味着取x的地址会给你一个int

您可能更喜欢int *x的另一个原因是,就语法而言,int是声明说明符序列,*x是声明符。它们是宣言的两个独立部分。当你有多个声明符如int *x, y;时,这就变得更加明显了。在这种情况下,可能更容易看到y不是指针。

然而,像我一样,许多人不愿意在单个声明中声明多个变量;在C ++中没有太多需要。这可能是偏好int* x形式的另一个原因。

只有一条规则:保持一致。

答案 4 :(得分:1)

绝对没有区别。

答案 5 :(得分:1)

没有区别。我倾向于选择

int* x

由于认为'x'的类型为int *。

答案 6 :(得分:1)

对于编译器,它们是相同的

但同时,当存在多个变量

时,差异是可读的
  

int * x,y

然而,这更具误导性

  

int * x,y

答案 7 :(得分:0)

两者都是一回事。

前者虽然是首选。假设您要声明2个指针p& q在同一行。

  

int * p,q;

这实际上意味着'p'是指向int的指针,而'q'是int。

正确的语法是:

  

int * p,* q;

因此,我们在指针的名称中包含*。

答案 8 :(得分:0)

这是一种编码风格。没有什么区别,只是因为你自己说的偏好。希望你明白。享受编码

答案 9 :(得分:-2)

在我看来,表达式int * x,y; xy是变量的名称。当这些名称由程序员声明时,这意味着他们有same typeint * 类型。