#include <iostream>
using namespace std;
void f(int* p) {
p = new int(100); //试图将p指向值为100所在地址
}
int main() {
int* a = NULL; //将指针p悬空
f(a); //调用函数f
cout << a << endl; //输出0000……,此时p的指向并没有改变
return 0;
}
原因:在C++中,函数参数默认采用值传递方式。当将指针a传递给函数f(int* p)时,传递的是指针的副本而非指针本身。函数会创建一个副本p,此时将这个副本指向100所在的地址,不会影响外部的原始指针a。
解决方法:采用 &引用传递的方式,或者使用int** 作为函数参数传入
#include <iostream>
using namespace std;
void f(int*& p) {
p = new int(100); //试图将p指向值为100所在地址
}
int main() {
int* a = NULL; //将指针a悬空
f(a); //调用函数f
cout << a << endl; //输出100所处的地址,此时a的指向不再为空
delete a; //注意采用new关键字分配的空间需要手动释放内存
return 0;
}

被折叠的 条评论
为什么被折叠?



