我想了解两者的用途?我现在理解的是Node *root
是对节点对象的根指针的引用另一方面Node* root
是指向节点本身的指针(允许你通过引用传递)
答案 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;
或
*