指针拷贝与值的传递

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

 

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

转载于:https://www.cnblogs.com/dylan2011/archive/2012/09/17/2688505.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值