c语言使用指针返回函数值,使用指针做函数返回值和指针作函数参数问题

本文探讨了C++中动态内存管理的技巧,包括如何在函数中分配内存并传递指针,以及如何避免悬挂指针的问题。通过示例展示了使用指向指针的指针来分配和释放内存的方法,并强调了释放内存后将指针设为NULL的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

printf("%c"n", a);           //值a改变!

}

4、根据上述的启发,我们也可以采用指向指针的指针来进行在调用函数中申请,在主函数中应用。如下:假设a的地址为ox23,内容为'a';而str的地址是ox46,内容为ox23;而pstr的地址是ox79,内容为ox46。

我们通过调用函数GetMemory,从而将pstr的内容赋给了p,此时p = ox46。通过对*p(ox23)的操作,即将内存地址为ox23之中的值改为char[100]的首地址,从而完成了对char* str地址的分配。

void GetMemory(char** p)

{

char *p = new char[100];

}

void main()

{

char a = 'a';

char* str = &a;

char** pstr = &str;

GetMemory(pstr);

strcpy(str, "hi");

}

5、注意指针的释放问题,可能形成悬浮指针。

当我们释放掉一个指针p后,只是告诉操作系统该段内存可以被其他程序使用,而该指针p的地址值(如ox23)仍然存在。如果再次给这块地址赋值是危险的,应该将p指针置为NULL。

调用函数删除主函数中的内存块时,虽然可以通过地址传递直接删除,但由于无法对该指针赋值(形参不能传值),可能造成悬浮指针,所以此时也应该采用指向指针的指针的形参。例如:

void MemoryFree(char** p)

{

delete *p;

*p = NULL;

}

void main()

{

char *str = new char[100];

char *pstr = &str;

MemoryFree(pstr);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值