C++指针作为函数参数传递
当我们把指针作为函数参数传递时,我们常常有个误解即只要在函数内把参数指向一个新的地址,实参也会跟着改变,但实际上不是。
ListNode* node;
void list(ListNode* newNode){
newNode=new ListNode(0);
newNode->next=nullptr;
}
这样操作之后实参的值其实并没有改变,传参的真正原理是传递一个副本,即在函数内部建立一个指向同一个地址的指针,如果说这个新指针指向了新的位置,仍然对实参指针没有任何影响,但如果通过新指针改变指向的位置的状态比如一些属性值,这是可以的。
实际来说指针也是按值传递,只不过传递的是地址,要想真正改变实参指针的值,要传递指针的指针。
ListNode node;
void list(ListNode** newNode){
*newNode=new ListNode(0);
...
}
list(&node)//传递指针的地址