代码之家  ›  专栏  ›  技术社区  ›  psihodelia

C-指针初始化,星号位置[重复]

c
  •  19
  • psihodelia  · 技术社区  · 14 年前

    放置星号最合适的方法是什么?为什么?

    1)    type*     var;
    2)    type      *var;
    
    9 回复  |  直到 14 年前
        1
  •  23
  •   germanfr nanobash    8 年前

    只要只声明一个指针,就不重要了。它通常和第二个示例(在我通常读/写的代码中)一样被写,但是对于编译器来说,它是相同的。

    如果声明多个指针,则可能会出现问题。例如,这不是声明两个指针,而是声明一个指针和一个类型为的var。

    type* var1, var2;
    

    你需要做的是:

    type* var1, *var2;
    

    我喜欢总是使用*by the var。

        2
  •  6
  •   Johan Kotlinski    14 年前

    指针是类型,我认为将类型信息分组最有意义:

    int* foo;
    

    如果在同一行上定义了多个变量,这可能会导致混淆:

    int* foo, bar;  // foo will be int*, bar will be int
    

    解决方法是,不要在同一行中声明多个变量。一些东西 Code Complete 不管怎样,拥护者们。

        3
  •  4
  •   Arkku    14 年前

    两者都有效。我认为1在 一般的 ,但在C中有误导性,可能导致错误,例如:

    type* var1, var2;
    
    // This actually means:
    
    type *var1;
    type var2;
    

    所以我想说2在C语言中更惯用,因此建议使用,尤其是如果您不是唯一一个编写代码的程序员(当然,除非您都同意某种风格)。

        4
  •  3
  •   Ziffusion    14 年前

    正如其他人所指出的,两者都很好地工作,而错误的一个事实上具有句法经济的优势。

    在我看来,声明包括 类型 然后是 变量 .

    <type> <variable>;
    
    int   ii;
    int* pii;
    

    所以,如果你拿走 变量 ,剩下的是 类型 . 哪个是 int INT* 上面。编译器处理 INT* 作为内部类型(即 指向int的指针 )

    不幸的是,C不支持这种无缝语法。当声明同一类型的多个变量时,您应该能够这样做:

    <type> <variable>, <variable>, <variable>;
    

    不能使用指针类型:

    int* ii1, ii2, ii3;
    

    声明类型为的II1 INT* 其他类型的 int . 为了避免这种情况,我习惯于每行只声明一个变量。

        5
  •  2
  •   Peter G. McDonald    14 年前

    我听说过,从技术上讲,*是变量的修饰符, 这可以通过在多变量中多次使用*来证明。 声明 例如,int*p、*q、*r;

    但是我喜欢把它当作基类型的修饰符,因为 是原型中出现的内容。 例如void func(int*);

    PMCD。

    我知道我没有帮你解决问题。)

        6
  •  1
  •   DavideDM    14 年前

    第二种模式正确。对于新手程序员来说,另一种模式并不那么清晰。 通常不鼓励使用int*形式的变量

        7
  •  1
  •   Christoph    14 年前

    声明语义遵循表达式语义(特别是运算符优先级),我发现使用第二种样式更容易阅读更复杂的声明。

    你可以想到

    int *foo;
    

    声明表达式的类型 *foo (即间接运算符应用于 foo )即将 int 而不是 声明为类型 int * .

    无论你选择什么样的惯例,都要保持一致。

        8
  •  0
  •   Ruel    14 年前

    这是编码员的偏好。

    对于我来说,我声明的指针是:

    int * var1, var2;
    

    其中: var1 是指针,并且 var2 不是。如果要在一行中声明多个指针:

    int * var1, * var2;
    

    当然,使用其他方法是有效的。

        9
  •  0
  •   pmg    14 年前

    没有一个“最合适的地方”。

    通常它是其余代码使用的地方。

    如果您从一开始就编写自己的代码,并且可以选择自己的约定:选择自己的约定并坚持下去。

    如果你选择的不是 type * var 你会遇到“尴尬”的情况:

    /* write these with another style */
    int * var;
    int const * var;
    int * restrict var;
    

    不要紧,但我通常用 type *var;