![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
一个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了呢? 展开
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了呢? 展开
1个回答
展开全部
不能使用指针,而要使用指针的引用的原因在于
当指针变量进入函数内部的时候,他也是拷贝了一份,作为函数内部的临时变量。
当函数退出的时候,这个临时变量就会被销毁,此时,原先函数外部的指针并没有获得新的对象,所以会出错。
比如
void build(ListNode* &nd, int val) {
nd = new ListNode(val);
}
若没有引用符号的话,那么nd就是一个函数内部的变量,那新生成的节点指向了这个临时变量,函数退出后,这个临时变量就销毁了,那新城生的节点到底指向了什么地方,没有办法确定,所以是不对的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询