转载:C 指针传递变量为什么无法修改变量值

今天在知乎看好一份非常好的指针的陷阱,做个搬运工:

题目要求就是给以下函数纠错:

void GetMemory( char*p )
{
  p = (char*) malloc( 100 );
}
void Test( void ) 
{
  char*str = NULL;
  GetMemory( str ); 
  strcpy( str, "hello world" );
  printf( str );
}
答案是这样的: 传入中GetMemory(char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完后的str仍然为NULL;

。我觉得有关指针的问题,其实最好的理解方式莫过于绘图。

从Test函数执行开始,str指向的是NULL


然后经过GetMemory函数以后,在这里发生了一次赋值,即 char *p = str;

所以,p指向了(str指向的NULL),于是就变为了如此


然而经过了GetMemory的malloc以后,p获得了一块新内存的地址,于是p的指向就变为了这样


那么,从这里可以看出来str与p就分道扬镳了,而str也还是指向NULL。

那么,如何修改呢?一个是C++的引用,另外一个就是二重指针,即把GetMemory变为 GetMemory(char ** p) 来保存str的地址。



作者:蓝色
链接:https://www.zhihu.com/question/41476387/answer/91566794
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


https://www.zhihu.com/question/41476387



猜你喜欢

转载自blog.csdn.net/daizhiyan1/article/details/78053062