【问题标题】:C++ pointers - common practice [closed]C ++指针 - 常见做法[关闭]
【发布时间】:2013-09-26 13:11:22
【问题描述】:

好的,我知道了

int *ptr;

是一个指向/属于一个int的指针

.

如果我这样做

int i = *ptr;

我正在取消引用指向值的指针

.

但我的问题是,为什么它如此普遍使用

int *ptr;

而不是

int* ptr;

相反?它们本质上是一样的,但是第一个例子看起来像是一个解引用而不是一个指针声明,而第二个例子是一个非常明确的指针定义。

【问题讨论】:

  • int* 令人困惑。想象一下int* a, b;a 将是一个指针而b 不会是不是很奇怪?但是int *a, b 虽然更明显,但确实看起来像是取消引用。这就是我使用int * a的原因,但是这个问题很自以为是。
  • 使用int *ptr;真的那么普遍吗?我几乎从未见过这种形式,这很好地表明这对 SO 来说不是一个好问题。当您在一行中声明许多变量时,它很有用,但这通常被认为是糟糕的风格。编辑:我所说的适用于 C++。
  • 这几乎是 C++ vs C 的事情,C++ 程序员更倾向于int* ptr,因为这强调了ptr 的类型。
  • 这是一个基于意见的问题的典型例子。就像括号前的空格,同一行或下一行的大括号,下一行的大括号缩进等...
  • @nijansen:回复:“int* 令人困惑。”:你说。

标签: c++ c pointers


【解决方案1】:

因为第一个选项在语法上更符合语言:

int *a, *b; // they are both pointers
int* a, b; // only a is a pointer

其次,C 程序员倾向于从数据的角度来思考,因此将指针属性与变量名而不是变量类型相关联会感觉很自然。 C++ 程序员倾向于根据类型进行思考,因此您可能会在 C++ 代码中更频繁地看到第二种表示法。

这两种表示法是等价的,但取决于您如何看待给定语言中的指针,您可能希望使用一种表示法或另一种(或完全不同的一种表示法)。

【讨论】:

  • 嗯,我从来没有考虑过。另外,我可能会错误地假设“b”也是一个指针。谢谢你教我一些新东西。
【解决方案2】:

使用第一种形式是因为它在一次声明多个变量时提供了更好的视觉提示:

int *ptr, actualInt;

要声明两个指针,你会这样做:

int *ptr1, *ptr2;

对比

int* ptr1, ptr2;

后者中的 ptr2 的类型不是很明显int。 当然你可以使用 typedef 来避免这种情况:

typedef int* IntPtr;

IntPtr ptr1, ptr2;

现在两者都是int*。 为避免由此引起的混淆,您应该避免使用类似这样的指针类型声明多个变量(或至少使用 typedef 变体以使其清楚)。

如果你只有一个变量,就像其他人已经说过的那样,这几乎是一个品味问题。

您要么想将所有类型信息集中在一个位置 (int* var),要么要强调变量是指针 (int *var)。

【讨论】:

    【解决方案3】:

    它们的意思是一样的。这是个人喜好问题。

    【讨论】:

      猜你喜欢
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      相关资源
      最近更新 更多