堆与栈的一个理解

clleady 2011-10-29 11:22:00
堆和栈的理论知识
2.1申请方式
stack:
由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间
heap:
需要程序员自己申请,并指明大小,在c中malloc函数
如p1 = (char *)malloc(10);
在C++中用new运算符
如p2 = (char *)malloc(10);
但是注意p1、p2本身是在栈中的。
我看到了一篇文章是这样写的。
请问“p1、p2本身是在栈中的”是什么意思?

我的理解是
代表p1,p2的地址是在栈中的。
因为我知道p1,p2代表一个地址,这个地址值是堆地址,而p1,p2的地址是栈地址。
请问高手,我理解对吗?
...全文
104 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiejijun_05 2011-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]
p1,p2是指针,也要占用4字节,这个在栈中,但是他的值(执行内容的地址),即指向的堆中的地址
[/Quote]


delete p1; // 释放p1所指向的堆的内存
delete p2; // 释放p1所指向的堆的内存
bdmh 2011-10-29
  • 打赏
  • 举报
回复
p1,p2是指针,也要占用4字节,这个在栈中,但是他的值(执行内容的地址),即指向的堆中的地址
vikiliu0310 2011-10-29
  • 打赏
  • 举报
回复
顶起,坐等高手~~
AnYidan 2011-10-29
  • 打赏
  • 举报
回复
指针变量, 指针值 没有分清楚
ischarles 2011-10-29
  • 打赏
  • 举报
回复
你可以理解为只有用malloc申请的空间才是存放在堆中的,而这些堆空间是需要一个指针变量来指明首地址的。这个存放首地址的指针变量本身是存放在栈中的。
群体认同 2011-10-29
  • 打赏
  • 举报
回复
指针是存放在stack里吗?我怎么觉得有点问题
irrestr1223 2011-10-29
  • 打赏
  • 举报
回复
同意5楼
xinshirn 2011-10-29
  • 打赏
  • 举报
回复
p1 p2是变量,变量的存在也是占空间的
char p1=(char *)malloc(10);

p1存在栈里面,写char p1=..的时候就把它放进去了;

p1的内容是一个地址,这个地址是堆里面的地址,也就是堆空间,也就是你申请的空间
qq120848369 2011-10-29
  • 打赏
  • 举报
回复
指针存地址,内存由地址指示.

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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