开发者社区> 问答> 正文

指针作为函数的参数

void MyFunc(char *pReturn, size_t size)
{
……
pReturn = (char *)malloc(sizeof(char) * num);
……
}
void main(void){
char *pMyReturn=NULL;
MyFunc(pMyReturn,10);
}
首先声明一个指针
char *pMyReturn=NULL;
然后调用MyFunc处理并返回一段长度为size的一段动态内存。为什么会失败?地址作为函数参数是不会产生副本的啊!

void MyFunc (char ** pReturn, size_t size)
{
* pReturn = (char *)malloc(size);
}
MyFunc (&pMyReturn, 100);// 注意参数是 & pMyReturn,而这样却可以成功,

请大神详细解释

展开
收起
a123456678 2016-06-08 21:36:47 1957 0
1 条回答
写回答
取消 提交回答
  • 指针可以看做是一个整数,4个字节的存储空间
    你失败的那个例子,就跟 @garfileo 说的一样, 依旧只是备份一个4个字节的空间出来,并且指向新申请的内存。
    函数运行完后, 这4个直接的空间一样被释放掉了。 新申请的内存,依然存在,并没有被释放。

    所以传址能成功,传值失败

    2019-07-17 19:32:47
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载