指针拷贝与值的传递
C永远有着那么多你所不知道的东西,最近在Coding的时候,发现对于指针,我还是没有琢磨好。
碰到这么一个问题,看代码如下:
View Code
1 int a; 2 3 address(int *m) 4 { 5 m = &a; 6 } 7 8 main() 9 { 10 int *p; 11 12 address(p); 13 }
这里只是为说明问题,将代码简化了,上面的代码有很大的问题,在main函数中,将指针做为实参传递给形参,这样可以吗?很显然,这是不可以的,这样传递的只是实参的一个拷贝而已,真正的实参并没有传递过去,所以,address调用完毕以后,对p没有任何的影响。当然,在做值传递的时候,大家也可以想到,其实值的传递也只是一个拷贝而已。
那么正确的代码应该是怎样的呢?请看下面的代码:
1.可以直接return一个地址,但这样只能传递一个参数。
2.用引用,比较推荐这种方法,请看
address(int **m) { *m = &a; }
调用的时候,address(&p)就可以了。
为了说明问题,画一内存图,便于理解。