【问题标题】:difference between Node* root and Node *root [duplicate]Node * root和Node * root之间的区别[重复]
【发布时间】:2016-12-11 10:18:09
【问题描述】:

我想了解两者的用途??我现在理解的是Node *root 是对指向节点对象的根指针的引用,另一方面Node* root 是指向节点本身的指针(允许您通过引用传递)

【问题讨论】:

  • 假设这是 C 那么它们是相同的。
  • C 中没有“ref”这样的东西。
  • 它们都是一样的,它们的意思是 root 是一个指向 Node 类型的指针。这意味着从现在开始,根将能够存储数据类型也是 Node.js 的变量的地址。当我们说变量是指针时,例如在您的示例中,这意味着您声明的指针将能够存储其他变量的内存地址,这些变量属于声明该指针本身的类型。这就是指向的意思(存储其他变量或内存位置的地址)。

标签: c


【解决方案1】:

此定义中的间距并不重要,您可以互换所有以下内容,它们都将root定义为指向Node的指针:

Node*root;

Node *root;

Node* root;

Node * root;

Node                        *root;  // I have seen that!

Node
*
root
;

Node(((*(root))));  // yes, this is allowed too!

\    
N\
od\
e*r\
oot ;          // ASCII art style: a corner case ;-) 

这是你喜欢使用的风格问题。请记住以下注意事项:

  • 可读性非常对于避免愚蠢和微妙的错误以及使代码更易于维护(无论是您自己还是他人)都很重要。

  • 一致性是使代码可读的关键:选择一种样式并在任何地方使用它。

  • Node * root 看起来像乘法,容易造成混淆。

  • 如果您在同一语句中声明多个变量,则在类型末尾添加* 会造成混乱:

    Node* root, tree;  // defines a pointer root and a structure tree.
    

    Node *root, *tree; // defines 2 Node pointers root and tree.
    

    这就是许多程序员喜欢在声明中将* 添加到标识符的原因。

    使用typedef隐藏指针性质与typedef Node *Nodeptr; 一样,或更糟糕的是typedef Node *List; 往往容易出错,并在程序员和读者的脑海中造成更多混乱.

【讨论】:

    【解决方案2】:

    node *foonode* foo 与编译器相同。

    !!有趣!!你可能不知道的琐事。当您编写看起来像多指针声明的内容时:

    int* a, b; // two int*, right?
    

    编译器看到的是一个 int 指针和一个 int 的声明:

    int *a;
    int b;
    

    要在一个语句中声明多个指针,您必须给每个指针一个*

    int *a, *b;
    

    int* a, * b;
    

    【讨论】:

      猜你喜欢
      • 2017-09-28
      • 1970-01-01
      • 2020-08-12
      • 2016-01-21
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多