关于C++的指针问题

像这两个写法,void的那种会崩,另一种没问题,指针传的不是地址么,为什么会崩呢?想test函数里面对指针修改,原本的也会修改,赋值指针怎么就不行了呢?
函数参数的话,指针相当于传递地址吧,对地址的修改原本的也会被修改,那root当作指针参数传进去,为什么赋值会不成功,print会崩溃

第二种,直接给指针赋值,修改的是传递参数的副本,原来的不会改!
test函数和第二种写法不同,test里面并不是给指针赋值,而是p->data,也就是(*p).data,这个p也是一个副本,但是因为这里使用的是*p,没有影响。
所以传递参数,不管是不是指针,你直接改参数是没用的,而要*它才会改变原来的参数的值。
所以第二种写法的参数应该是node **p。
void create(node **p){
int a;
cin>>a;
if(a==-1){*p=NULL;}
else{
*p=new node();
(*p)->data=a;
create(&(p->next));
}
}
温馨提示:答案为网友推荐,仅供参考