函数中分配内存的问题

只是为了能够让自己讲清一些事!

大家都知道,如果想要在在C++的函数中分配内存,那么就只得使用指针的引用传递,或是二级指针

如:void MyNew(int** p) { *p = new int; } void MyNew(int*& p) { p = new int; }

而通常我们在开始的学习中,都会写成

void MyNew(int* p)

{

   p = new int;

}

为什么这样分配不会成功呢?

原理很简单,就是形参传递时的拷贝。

当p传入进MyNew的时候,函数内部会对其进行拷贝。而函数内部真正操作和分配到了内存的,就是那个考贝后的变量。

偽代码如下:

void MyNew(int* p)

{

    int* temp = p;

   temp = new int;

}

不言而寓,最终p也没有得到想要分配给他的址。

而上面两种方式,采用了引用的,就不会产生拷贝,自然就不用解释了。

而采用二级指针的,我们同样用偽码可以看到。

void MyNew(int** p)

{

    int** temp = p;

   *temp = new int;

}

虽然同样是进行了拷贝,但是由于 temp和p同样指向一个地方,则*temp正好就是我们想要分配给它地址的那个值,所以最后得到了想要的结果!!!

转载于:https://www.cnblogs.com/qilinzi/archive/2010/04/27/1940501.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值