【问题标题】:Why do people use Type *var instead of Type* var? [duplicate]为什么人们使用 Type *var 而不是 Type* var? [复制]
【发布时间】:2011-11-09 22:19:02
【问题描述】:

可能重复:
Declaring pointers; asterisk on the left or right of the space between the type and name?
Does it matter where I place the asterisk when declaring pointers in C++?

我进行了搜索,但我的关键字似乎不合适。我很确定这个问题已经被问过了。如果您知道链接或其他内容,请指出我的方向!

我的问题是,为什么这么多人使用

TypeIdentifier *varname;

代替

TypeIdentifier* varname;

这对我来说更合乎逻辑,因为 * 修改了类型而不是变量名。

【问题讨论】:

  • 请在提出新问题之前使用搜索 - 这已经被问及回答了 无数次 次。
  • 伙计,我必须训练我的关键字技巧。感谢您的链接。 @mekici 是的,确实如此。嗯,我愿意。有时真的让我很困惑,我必须仔细看看这个变量到底是什么类型。
  • Stroustrup 推荐 Type* name 而不是 Type *name

标签: c++ c pointers syntax


【解决方案1】:

在 C 和 C++ 中,声明语法(大部分)遵循用法。

声明

int *n;

可以读作“n 属于int* 类型”,或“*n 属于int 类型”。如果你看一下语言语法,后者更接近于它的解析方式。

对于仅由名称(如int)和* 组成的类型,它并没有太大的区别,但对于更复杂的声明很重要。

通常的趋势是在 C 中使用 int *n;,在 C++ 中使用 int* n;。后者是因为那是 Stroustrup 的个人喜好。我认为他的观点是“nint* 类型”的阅读更自然,并且可以通过不编写复杂的声明来避免复杂性。例如,无论你喜欢哪种间距,最好写成

int *a;
int b;

比任何一个

int* a, b;

int *a, b;

【讨论】:

    【解决方案2】:

    好吧,语言的语法另有说明。您可以通过

    轻松检查
    Type * var1, var2;
    

    这里会发生什么?

    【讨论】:

      【解决方案3】:

      这是因为 C 的声明语法。

      int* a, b;
      

      看起来好像它定义了两个int* 类型的变量,但实际上将a 声明为int* 类型并将b 声明为int 类型。如果你写

      int *a, b;
      

      这很明显。然而,我个人更喜欢不写这样的定义,而是写

      int* a;
      int b;
      

      这对类型毫无疑问。

      【讨论】:

        【解决方案4】:

        C 约定是将* 附加到变量,因为连续的多个变量不共享*

        int *a, b; /* a is an int*, while b is an int. */
        

        在 C++ 中,规则是相同的,但由于上述声明的混乱性质以及随之而来的每次声明只声明一个变量的做法,将疣附加到类型上更为常见:

        int* a;
        int b;
        

        我倾向于 C++ 约定,但也允许在一行上声明多个非指针或引用:

        int a, b;
        int* c;
        int* d;
        

        【讨论】:

          【解决方案5】:

          因为 K&R 使用了 Foo *bar 并且人们坚持使用它。

          【讨论】:

            猜你喜欢
            • 2018-10-27
            • 2011-03-21
            • 2021-05-07
            • 1970-01-01
            • 2015-07-14
            • 2019-01-20
            • 2012-05-21
            • 1970-01-01
            • 2011-10-03
            相关资源
            最近更新 更多