15

我正在重新开始我的 C++ 研究,并真正尝试了解基础知识。指针总是给我带来麻烦,我想确保我真的明白了,然后再继续前进并在路上感到困惑。

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

int *x

有些人这样做:

int* x

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

那么,在我建立自己的思维导图之前,两者之间是否存在功能差异?如果我这样做,我会成为麻风病人的弃儿吗?

谢谢。

4

10 回答 10

19

著名的Bjarne Stroustrup以 C++ 的创造和发展而著称,他说...

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

“典型的 C 程序员”会写“int *p;” 并解释它“*p is what is the int”强调语法,并可能指向C(和C++)声明语法来论证风格的正确性。实际上,* 绑定到语法中的名称 p。

“典型的 C++ 程序员”会写“int* p;” 并解释它“p 是指向 int 的指针”,强调类型。实际上 p 的类型是 int*。我显然更喜欢这种强调,并认为它对于很好地使用 C++ 的更高级部分很重要。

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

这里

于 2013-04-10T17:55:55.460 回答
10

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

从风格上讲,两者都有支持和反对的论据。

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

int* x, y, z;

意味着x和都是指针yz它们不是(仅x是)。

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

int *x, y, z;

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

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

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

于 2013-04-10T17:53:20.520 回答
5

完全没有区别。

这只是风格问题。

个人更喜欢这个:

int *x;

对此,

int* x;

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

int* x, y, z;

x是一个指向 的指针int,但也是yz指针吗?看起来它们是指针,但它们不是.

于 2013-04-10T17:53:59.593 回答
3

没有区别。我使用该int* x表单是因为我更喜欢将所有类型组合在一起远离名称,但这种类型与更复杂的类型(如int (*x)[10].

有些人更喜欢int *x它,因为您可以将其理解为“取消引用x给您一个int”。但是,当您开始使用引用类型时,即使这样也会崩溃。int &x并不意味着获取地址x会给你一个int.

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

然而,很多人,比如我自己,不喜欢在一个声明中声明多个变量。在 C++ 中没有太多需要。int* x这可能是更喜欢这种形式的另一个原因。

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

于 2013-04-10T17:54:44.067 回答
1

没有不同。我倾向于更喜欢

int* x

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

于 2013-04-10T17:55:49.023 回答
1

完全没有区别。

于 2013-04-10T17:54:09.113 回答
1

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

但同时,当有多个变量时,区​​别在于可读性

整数 *x,y

然而,这更具误导性

整数* x,y

于 2013-04-10T17:57:01.527 回答
0

两者都是一回事。

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

整数* p, q;

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

正确的语法是:

整数* p, *q;

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

于 2013-04-10T17:58:03.980 回答
0

这是一种编码风格。没有区别,只是你自己说的偏好问题。希望你清楚。享受编码

于 2013-04-10T18:05:41.040 回答
-2

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

于 2013-04-10T18:11:03.493 回答