请将一个困惑很多的问题(在自定义函数中进行New),多谢

jjajun 2011-08-22 07:08:41
现在有段代码很困惑,也查了很多资料,始终没有能理解其中根本的原理,谁能清楚地解释一下,再次谢过了。
1void MyNew(int *p)
2{
3 p = new int;
4}
5
6int main()
7{
8 int *p = NULL;
9 MyNew(p);
10}

在main函数中*p无法通过MyNew()获得相应的内存,为什么?

...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
对象 2011-08-22
  • 打赏
  • 举报
回复
这是value operation了,lz如果把传递的参数改成&p应该就可以了。

就跟三楼说的似的,你的目标是操作指针,不是操作变量,因此你得传指针的指针。
yby4769250 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 babilife 的回复:]
引用 3 楼 zmlovelx 的回复:
理解传值,传指针,传引用的区别.
MyNew(int *p) 要修改变量,就得传变量的指针, 要修改指针(看成变量),就得传指针的指针.
当然直接传引用也是可以的.


++1,通俗易懂
[/Quote]
按值传递和按引用传递的区别,你区分实参p和myNew的形参p的关系就好了,他们仅仅是简单的值拷贝关系,除此之外,没有联系
恨天低 2011-08-22
  • 打赏
  • 举报
回复
1void MyNew(int *p)
2{
3 p = new int;
4}
5
6int main()
7{
8 int *p = NULL;
9 MyNew(p);
10}
这样属于值传递。执行MyNew时候,栈上开辟P内存,MyNew执行结束,p栈内存回收。

顺便说下,在哪里new就在哪里delete!否则有内存泄露
至善者善之敌 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zmlovelx 的回复:]
理解传值,传指针,传引用的区别.
MyNew(int *p) 要修改变量,就得传变量的指针, 要修改指针(看成变量),就得传指针的指针.
当然直接传引用也是可以的.
[/Quote]

++1,通俗易懂
帅得不敢出门 2011-08-22
  • 打赏
  • 举报
回复
理解传值,传指针,传引用的区别.
MyNew(int *p) 要修改变量,就得传变量的指针, 要修改指针(看成变量),就得传指针的指针.
当然直接传引用也是可以的.
jjajun 2011-08-22
  • 打赏
  • 举报
回复
ls说的,我也知道,我只是不明白,为什么不能直接传P,取得内存,按理说p也是个指针,为什么就不能取得内存??
xiaoguangzaia 2011-08-22
  • 打赏
  • 举报
回复
MyNew(int **p)
然后MyNew(&p)

或者是引用,或者返回指针都可以

64,431

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧