Node * root和Node * root之间的区别

时间:2016-12-11 10:18:09

标签: c

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

2 个答案:

答案 0 :(得分:11)

此定义中的间距不重要,您可以互换地编写以下所有内容,它们都将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;往往容易出错,并且在两者中都会造成更多混乱程序员和读者的想法。

答案 1 :(得分:4)

var index = 0; $('#test_add').on('click', function() { index += 1; var template_row = '<tr><td><button class="row_remove_btn">Remove</button></td><td>Foo' + index + '</td><td>Bar' + index + '</td></tr>'; $('#t tbody').append(template_row); }); $('#t').on('click', 'button.row_remove_btn', function(event) { var row = $(event.target).parent().parent(); row.remove(); });<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button id="test_add">Add Row</button> <table id="t"> <tbody> </tbody> </table>与编译器完全相同。

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

node *foo

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

node* foo

要在一个语句中声明多个指针,您必须为每个指针指定int* a, b; // two int*, right?

int *a;
int b;

*