指针拷贝与值的传递

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)就可以了。

 

为了说明问题,画一内存图,便于理解。

posted on 2012-09-17 12:07  竞击  阅读(302)  评论(0编辑  收藏  举报