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

声明指针;在类型和名称之间的空格的左边或右边有星号?[复制品]

  •  94
  • jakogut  · 技术社区  · 14 年前

    可能的重复:
    What makes more sense - char* string or char *string? Pointer declarations in C++: placement of the asterisk

    我在很多代码中看到过这种混合版本。(这也适用于C和C++。)人们似乎用两种方式中的一种来声明指针,而我甚至不知道哪一种是正确的,即使它很重要。

    第一种将星号放在类型名称旁边的方法,如下所示:

    someType* somePtr;
    

    第二种方法是在变量名旁边加上星号,如下所示:

    someType *somePtr;
    

    这让我发疯已经有一段时间了。有什么标准的方法来声明指针吗?指针的声明方式是否重要?我以前使用过这两个声明,我知道编译器并不关心它是哪种方式。然而,事实上我看到指针以两种不同的方式声明,这让我相信它背后有原因。我很好奇这两种方法在某种程度上是否更具可读性或逻辑性。

    6 回复  |  直到 8 年前
        1
  •  88
  •   Tyler McHenry    14 年前

    这是一个偏好的问题,有点神圣的战争,就像支架风格。

    风格

    someType* somePtr;
    

    强调指针变量的类型。它实际上是说 somePtr 是指向- someType “。

    风格

    someType *somePtr
    

    强调的是指向数据的类型。从本质上说,它是指 索普特 形体 “。

    它们的意思都是一样的,但这取决于一个给定的程序员在创建指针时的心理模型是“集中”在指向的数据还是指针变量上。

    把它放在中间 someType * somePtr )试图避免承诺任何一个。

        2
  •  106
  •   ForceBru    8 年前

    没关系。现在有人会来把这个问题作为一个骗局来结束,而另一个人将展示 int* a 如果在同一声明中声明多个变量,而 int *a 更好地反映代码的语法结构的方法,另一个人将显示stroustrup更喜欢 iT*A 方式。

    很多意见,但这里没有“正确”的方法。

        3
  •  50
  •   Brian R. Bondy    14 年前

    没关系,这是个人喜好。

    有些人喜欢保持这种类型:

    int* p;
    

    其他人说它应该放在变量旁边,因为:

    int *p, x;//declare 1 int pointer and 1 int
    int *p, *x;//declare 2 int pointers.
    

    随着时间的推移,你会忽略这一点,接受这两个变化。

        4
  •  22
  •   Lance Diduck    14 年前

    差异是因为C++在C.之上添加了一个更强大的类型系统,C程序员通常用“值”来思考。

    int  *pValue;
    

    读取“pValue的解引用是一个int” 而C++程序员在“类型”中这样想

    int* pValue;
    

    读取“类型pvalue是指向int的指针” 编译器当然看不出有什么不同。但是,你会发现C程序员在C++编程时坚持“价值语义”。

        5
  •  17
  •   dteoh    14 年前

    我认为把星号放在变量名旁边会更清楚。

    你可能会误报 someType* one, two; 认为它们都是指针,但只是变量 one 是指针; two 只是一个 someType . 声明为 someType *one, *two 避免这个问题。

        6
  •  -4
  •   RivieraKid    11 年前

    我见过的每一种方式都是

    TheType *myPointer
    

    因为您正在声明类型为thetype的指针。类似声明

    TheType myVar
    

    将声明类型为thetype的实例变量。

    你也可以清楚地做到这一点,并使它易于阅读

    TheType myVar, *myPointer;