c++中的int* x和int* x有区别吗?

Is there a difference between int *x and int* x in C++?

本文关键字:int 有区别 c++ 中的      更新时间:2023-10-16

我正在重新开始我的c++学习,并真正试图了解基础知识。指针总是给我带来麻烦,我想确保在我继续前进并在道路上感到困惑之前我真的掌握了它。

可悲的是,我在一开始就被我正在阅读的教程中的不一致所阻碍。有些是这样声明指针的:

int *x

和一些这样做:

int* x

到目前为止,前者似乎是最常见的。这很令人沮丧,因为第二种说法对我来说更有意义。当我读到int *x时,我读到的是"这是一个int,它的名字是*x",这是不完全正确的。但是当我读第二段时,我看到"这是一个int指针,它的名字是x",这是相当准确的。

所以,在我建立我自己的心理地图之前,这两者之间有功能上的区别吗?如果我用第二种方法,我会成为一个被遗弃的麻风病人吗?

谢谢。

著名的Bjarne Stroustrup,以c++的创建和发展而闻名,他说…

在"int* p;"answers"int* p;"之间的选择与对与无关错了,是关于风格和重点。C强调表达;宣言常常被认为是一种必要的罪恶。另一方面,c++非常强调类型。

一个"典型的C程序员"会写"int *p;"并解释"*p是什么"是强调语法的int型,并且可能指向C(和c++)声明语法以证明风格的正确性。的确,语法中的*绑定到名称p。

一个"典型的c++程序员"会写"int* p;"并解释为"p是A"指向整型"强调"类型的指针。p的类型确实是int*。我很明显,我更喜欢这个强调,并且认为它对于使用c++的更高级的部分。

所以没有区别。这只是一个代码风格。

从这里

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

从文体上来说,两者都有各自的优缺点。

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

int* x, y, z;

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

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

int *x, y, z;

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

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

无论您决定采用哪种思想流派,您都会在野外遇到两种风格,甚至更多(有些人写int * x)。

没有区别。

这只是风格的问题。

我个人更喜欢这样:

int *x;

/,

int* x;

因为当在同一行声明多个变量时,后者可读性较差。例如:

int* x, y, z;

这里x是指向int的指针,但是yz指针也是吗?看起来像它们是指针,但它们是而不是

无差异。我使用int* x的形式,因为我喜欢保持所有的类型组合在一起,远离名称,但这有点崩溃与更复杂的类型,如int (*x)[10]

有些人更喜欢int *x,因为你可以把它读成"解引用x得到int"。但是,当您开始使用引用类型时,即使这样也会崩溃;int &x并不意味着获取x的地址就会得到int

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

然而,很多人,像我自己一样,不喜欢在一个声明中声明多个变量;在c++中不需要这么做。这可能是首选int* x形式的另一个原因。

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

绝对没有区别。

无差异。我倾向于选择

int* x

由于认为'x'具有int*类型,

对于编译器来说它们是相同的

但同时,当有多个变量

时,区别在于可读性

int *x,y

但是这更容易误导人

int * x, y

两者是一回事。

虽然首选前者。假设你想声明两个指针p &Q在同一行

int* p, q;

这实际上意味着'p'是一个int型指针,而'q'是一个int型指针。

正确的语法是:

int* p, *q;

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

这是一种编码风格。没什么区别,就像你自己说的,只是偏好的问题。希望你明白。

我认为,在表达式int * x,y;中,xy是变量的名称。当程序员像这样声明这些名称时,这意味着它们具有same typeint *类型。