为什么使用了指针形参,但是返回值还是没有改变
今天遇到一个问题,如题,下面上例子
1 void Get(Node* head) 2 { 3 Node* temp = new Node(); 4 temp->a = 5; 5 head = temp; 6 } 7 8 int main() 9 { 10 Node* head = nullptr; 11 Get(head); 12 13 std::cout << head->a; 14 15 std::cin.get(); 16 return 0; 17 }
程序一运行就会报错,后来想了想,想明白了,修改代码如下
1 Node* Get(Node* head) 2 { 3 Node* temp = new Node(); 4 temp->a = 5; 5 head = temp; 6 return head; 7 } 8 9 int main() 10 { 11 Node* head = nullptr; 12 head = Get(head); 13 14 std::cout << head->a; 15 16 std::cin.get(); 17 return 0; 18 }
两个代码主要修改就是Get函数增加了返回值。那为什么就正确了呢,我们的指针形参不应该直接返回我们修改后的值吗。你仔细想想我们指针在主函数中被赋值为空,也就是并没有指向任何内存,然后到了Get函数,我们的指针被赋值了,指向了一个新的内存块。
我们仅仅只看这些代码,你就会发现我们在Get函数中,其实是对指针这个类型的值进行了改变,而这个我们所说的指针形参是对我们指针指向的内存中的元素进行改变。所以这里的我们的指针head就像int一样是个值传递。如果你把Node*改成int,就很清晰了。所以说到底还是概念和理解的不到位。