一个C++ 指针的小问题

structListNode{intval;ListNode*next;ListNode(intx):val(x),next(NULL){}};voidbuild(Lis... struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};

void build(ListNode* &nd, int val) {
nd = new ListNode(val);

}

void insert(ListNode* &nd, int val) {
if (nd == nullptr)
nd = new ListNode(val);
else
insert(nd->next, val);
}

int main() {
ListNode* A;

build(A, 10);

insert(A, 20);

return 0;

}

问题就在于buid和insert里的 new ListNode(val) 还有ListNode* &nd上了
如果把&去掉。就无法插入新的node。
但如果只是print,遍历一下的话,没有&也照样可以用。
问题就在于new ListNode(val)了。

没有&的情况下,nd是拷贝了一份一模一样的A所指向的地址么?
为什么直接用nd就不能创建出来新的node了呢?
展开
 我来答
yanglei5658
推荐于2016-08-16 · TA获得超过4753个赞
知道大有可为答主
回答量:835
采纳率:100%
帮助的人:483万
展开全部

不能使用指针,而要使用指针的引用的原因在于

当指针变量进入函数内部的时候,他也是拷贝了一份,作为函数内部的临时变量。

当函数退出的时候,这个临时变量就会被销毁,此时,原先函数外部的指针并没有获得新的对象,所以会出错。

比如

void build(ListNode* &nd, int val) {
    nd = new ListNode(val);
}

若没有引用符号的话,那么nd就是一个函数内部的变量,那新生成的节点指向了这个临时变量,函数退出后,这个临时变量就销毁了,那新城生的节点到底指向了什么地方,没有办法确定,所以是不对的。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式