1 #include <iostream> 2 3 using namespace std; 4 5 void fun(char *q){ 6 q = new char; 7 } 8 int main(int argc, char* argv[]) 9 { 10 char *p = NULL; 11 fun(p); 12 cout << p << endl; //运行报错,内存不能访问 13 }
原因说明:
在参数传递时,由*q = p的过程,实际上是在函数fun中局部变量q指向p的内存,然后再对q指向其他申请的内存,但是p的指向一直都没有变。
解决方法:
1、两级指针
1 #include <iostream> 2 3 using namespace std; 4 5 void fun(char **q){ 6 *q = new char; 7 } 8 int main(int argc, char* argv[]) 9 { 10 char *p = NULL; 11 12 fun(&p); 13 14 cout << p << endl; 15 }
2、指针的引用 (我更喜欢第二种)
1 #include <iostream> 2 3 using namespace std; 4 5 void fun(char *&q){ 6 *q = new char; 7 } 8 int main(int argc, char* argv[]) 9 { 10 char *p = NULL; 11 12 fun(p); 13 14 cout << p << endl; 15 }