C++中指针引用工作原理:修改temp->next是否会同步改变head的next?
结论
先明确前提:你给出的代码片段中Node* head仅声明未初始化,如果实际运行时head是未指向合法对象的野指针,那么执行temp->next=p属于访问非法内存,是未定义行为,程序可能崩溃、可能返回随机值,不存在确定结果。
如果head已经提前初始化,指向了一个合法的Node实例,那么答案如下:
head的next成员会同步改变head->next的值等于指针p存储的地址,也就是你通过new Node(2)创建的Node对象的内存地址
原理
指针的本质是存储内存地址的变量,Node* temp=head执行的是地址拷贝:temp和head是两个独立的指针变量,但它们存储的地址完全相同,指向同一个Node实例。
此时通过temp修改指向对象的next属性,本质修改的是这个公共Node实例的成员,通过head访问同一个实例的next属性,自然拿到的是修改后的结果。
内容的提问来源于stack exchange,提问作者Himanshu Ranjan
相关产品推荐
相关产品推荐

