博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数中分配内存的问题
阅读量:5893 次
发布时间:2019-06-19

本文共 731 字,大约阅读时间需要 2 分钟。

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

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

如:

  1. void MyNew(int** p)  
  2. {  
  3.     *p = new int;  
  4. }  
  5.   
  6. void MyNew(int*& p)  
  7. {  
  8.     p = new int;  
  9. }  

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

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正好就是我们想要分配给它地址的那个值,所以最后得到了想要的结果!!!

作者:

出处: 
蛮牛专栏:
简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/geniusalex/archive/2010/04/27/1940501.html

你可能感兴趣的文章
深入了解Android蓝牙Bluetooth——《基础篇》
查看>>
BZOJ 1179: [Apio2009]Atm(tarjan+SPFA)
查看>>
【iCore4 双核心板_ARM】例程四:USART实验——通过命令控制LED
查看>>
再授孔丘
查看>>
jni c++
查看>>
nginx配置ssl双向验证 nginx https ssl证书配置
查看>>
ORB:新一代 Linux 应用
查看>>
第三十三节,sys解释器相关模块
查看>>
CDC spyglass
查看>>
Node.js模块 require和 exports
查看>>
快速集成iOS基于RTMP的视频推流
查看>>
在C#中获取如PHP函数time()一样的时间戳
查看>>
Redis List数据类型
查看>>
C++ Tip: How To Get Array Length | Dev102.com
查看>>
Python Socket学习 - garfieldtom - 博客园
查看>>
配置oracle账号密码永不过期
查看>>
Fluent NHibernate之旅
查看>>
android DDMS 连接真机(己ROOT),用file explore看不到data/data文件夹的解决办法
查看>>
android 窗
查看>>
使用TRACE时 输出 _CrtDbgReport: String too long or IO Error
查看>>