指针的问题!苦恼!

whutxuan 2003-10-17 04:20:24
void malloc_mem(char ** p);
void malloc_mom(char *p);
int main(int argc, char* argv[])
{
char *p=NULL;
malloc_mom(p);
; /p还是=null
malloc_mem(&p);
;//p分配到一个新地址,为什么呢?如果是由于堆栈,那么malloc_mem结束后,堆栈也结束了??
return 0;
}

void malloc_mem(char **p)
{
(*p )=(char *)malloc(100);
}
void malloc_mom(char *p)
{
p=(char *)malloc(100);
}

...全文
28 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lightter 2003-10-20
  • 打赏
  • 举报
回复
up
不错
tackdhly 2003-10-17
  • 打赏
  • 举报
回复
火鸟说得很对。
在看书时指针这一节,我反复看了几遍才看懂了。
是有点容易混消。
不过,理解它了就不会了。
hbffff 2003-10-17
  • 打赏
  • 举报
回复
火鸟说得很透彻了,c的参数都是传值的,值是不被改变的。传入的任何实参“本身”
都不会改变。
hhlong 2003-10-17
  • 打赏
  • 举报
回复


学习中!
wgzh 2003-10-17
  • 打赏
  • 举报
回复
malloc_mom(p)你传递指针给函数的时候,会产生一个新的指针拷贝
而你在函数内部修改指针的植并不会影响你的p,也就是说你分配的空间在函数外已经没有指针指向了.而你的p还是原来的值,所以是NULL.
malloc_mom(p)函数传指针进去时,你不能改变指针本身,但是你可以改变指针指向的值。这跟传值时你不能改变值本身一样的道理。

malloc_mem(&p);
你的函数接受指针的指针,此时你也不能改变指针&p本身,你改变的只是指针&p指向的值P,所以就使p分配到内存了。
zoohoo 2003-10-17
  • 打赏
  • 举报
回复
第一个函数传人的是指针,第二个是指针的地址,没有办法对指针做分配内存,除非是地址,所以有这样的结果
gernal_dn 2003-10-17
  • 打赏
  • 举报
回复
你要通过参数表返回一个指针,只能使用char **p的形式,而malloc_mom(char *p)只修改了一个临时指针!

69,336

社区成员

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

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