C++链表函数声明中node* &head的指针相关语法含义是什么
node* &head 含义说明 语法本质
这是C++中的指向node类的指针的引用,可以从右向左拆分理解:
- 紧邻变量名的
&表示head是一个引用变量 - 前面的
node*表示该引用绑定的对象类型是node类的指针
说白了就是给外部传入的原头指针起了个别名,函数内对head的修改都会直接作用到外部的原指针上。
和普通指针参数的区别
如果函数参数写成node* head,属于值传递:函数拿到的是外部头指针的拷贝,修改这个拷贝本身(比如让它指向新节点)不会影响外部的原指针。这种写法在插入空链表的第一个节点时会直接出bug——函数内已经把head指向了新节点,但外部的head还是nullptr。
用node* &head这种引用传递的写法,就完全规避了这个问题:空链表插入第一个节点时,直接给head赋值新节点地址就行,外部的原头指针会同步更新。如果是C语言没有引用语法的场景,等价的写法是二级指针node** head,只是C++的指针引用省略了额外的解引用操作,写法更简洁。
调用示例
node* head = nullptr; // 直接传入head即可,不需要额外取地址或者接返回值 insertAtTail(head, 10); // 调用完成后head已经指向第一个值为10的节点
内容的提问来源于stack exchange,提问作者Joseph Braganza
相关产品推荐
相关产品推荐

