c – 关于指针的引用
发布时间:2020-12-16 10:11:40 所属栏目:百科 来源:网络整理
导读:我一直在做树,因为种树会拯救地球(或只是程序). class Tree { Node* root; // ... void insert(int value){ private_insert(value,root); } void insert_private(int value,node* n){ if(n == nullptr){ n = new node(value); } else { your standard recurs
我一直在做树,因为种树会拯救地球(或只是程序).
class Tree { Node* root; // ... void insert(int value){ private_insert(value,root); } void insert_private(int value,node* n){ if(n == nullptr){ n = new node(value); } else { your standard recursive insertion function here } } // ... }; 长话短说我先尝试过使用shared_ptrs,但insert()函数永远不会在我的树中添加任何元素.我以为我可能会对共享做错了所以我尝试了原始指针,并且我得到了相同的非插入式resoults. 结果我需要传递一个引用我的root / nodes. void insert_private(int value,node*& n) {...}; 我明白,如果我不传递某些东西作为参考,那么就会制作一份副本.但是如果一个指针持有一个地址,它的副本是否保持相同的地址?如果我为一个非引用指针创建一个new(),为什么它不会粘在我的根/节点上? 为什么我的问题在这里,我可以接受它,它的工作原理,我的树工作,但我不知道为什么它像这样. 编辑:阅读评论后,我创建了这个小专家级程序: void fn(int* i){ cout << "Address of local in fn before change: " << i << endl; i = new int(2); // so basically here we made a new int,and i will get the address of // this integer and will point to there,what we passed on before // becomes irrelevant cout << "Address of local in fn after change: " << i << endl; } void fn2(int **i){ cout << "Address of local in fn2 before change: " << i << endl; *i = new int(2); cout << "Address of local in fn2 after change: " << i << endl; } int main(){ int* p = nullptr; cout << "Address of p: " << p << endl; fn(p); cout << "p& is: " << &p << endl; fn2(&p); cin.get(); return 0; }; 谢谢大家的答案,它帮助了很多. random.org将确定谁将获得批准答案的人. 解决方法
是的它是一个副本,它保存相同的地址,但是您只分配给该副本,该副本在函数返回时被丢弃.原件没有改变.那是你的问题.
顺便说一句,恕我直言,如果你改变一个参数的值,你应该使用一个指针,因此指向你的情况下的指针.这使得读者更清楚地知道你正在改变价值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |