[指针四] 通过函数进行动态内存申请---二级指针、函数返回值
来源:互联网 发布:ye2系列电机绕组数据书 编辑:程序博客网 时间:2024/05/21 15:02
通常,在规范化编程中,我们期望重复做的事放在函数中实现。在程序中,我们有多个地方需要进行动态内存申请,每次都写重复的代码容易出错,看起来冗余不工整,这时我们可以编写一个函数,每次调用该函数来进行动态内存的申请,通常有两种方法可以实现:
1.通过二级指针做形参,返回在函数中申请的动态内存地址:
例如:
#include <stdio.h>#include <malloc.h>int memory_malloc(int **p, int size){*p = (int *)malloc(size*sizeof(int));//改变(0x0027fa10)中的值,将动态申请的内存地址(0x00316668)放在(0x0027fa10)指向的内存中。if(!p){printf("memory melloc failed!\n");return 0;}return 1;}int main(){int *pointer = NULL ,i = 0;//pointer指向的内存地址为0x00000000if(memory_malloc(&pointer,5))//将内存地址0x00000000的地址(0x0027fa10)作为参数传递给函数{//即,函数中动态申请的内存的地址,通过参数的形式传递给主函数for(i = 0;i < 5;i ++){pointer[i] = i;printf("%d ",pointer[i]);}}return 1;}
对于二级指针,做形参时传入地址(注意此时传入的是二级指针的地址),如果改变该二级指针地址(**p),对该指针的操作也将无效,但是改变二级指针的内容(例如*p),则该二级指针可以正常返回。
一级指针可以实现值的传递,二级指针可以实现地址的传递。
上面的二级指针,是将pointer指向的内存地址的指针通过参数的形式传递给函数,在函数中改变该二级指针的值,即pointer所指向的内存地址。从而达到动态分配内存地址,使pointer指向它,并且使用它。
2.使用一级指针实现内存申请,通过函数返回值带出malloc的地址:
#include <stdio.h>#include <malloc.h>char *my_malloc(int m){char *p;p=(char *)malloc(m);return p;//此处只能返回指向“堆内存”的指针,不能返回指向“栈内存”的指针,因为该“栈内存”在函数结束时自动消亡}int main(){char * buff = NULL; //指针如果在函数内没有赋值,注意开始赋值为NULLbuff = my_malloc(10);printf("buff adress is %x\n",buff);free(buff); return 1;}
0 0
- [指针四] 通过函数进行动态内存申请---二级指针、函数返回值
- 二级指针作为函数参数申请内存
- 返回指针的函数及动态申请内存
- 通过函数参数形式申请二级指针空间, 代码改错
- 关于返回指针以及动态申请内存
- 关于返回指针以及动态申请内存
- 关于用指针作为函数参数申请动态内存
- 关于用函数指针参数申请动态内存的问题
- C++函数动态申请指针的内存管理
- 关于用函数指针参数申请动态内存的问题
- c语言中的内存管理(重点:动态内存申请释放,野指针,指针函数)
- C语言编程基础-16动态内存分配 二级指针做形参 函数指针
- 如果函数的参数是一个指针,不要指望用该指针去申请动态内存。
- 指针作为函数参数,申请内存
- 二级函数指针
- 二级函数指针
- 《IOS_C语言》函数指针、函数回调、动态排序、函数返回值是函数指针
- 函数指针,指针函数,返回值为指针的函数
- 【LeetCode with Python】 Longest Consecutive Sequence
- jQuery ScrollPagination 自动增加分页及重复加载问题
- Python 面向对象编程
- Linq 先进行分组,在进行排序(选取某一个人的最新的一条记录)
- Adapter - 适配器模式
- [指针四] 通过函数进行动态内存申请---二级指针、函数返回值
- 在Notepad++中搭配Python开发环境
- 坑爹的卸载JDK
- 2014年7月
- TMP(模板元编程)实例
- 【LeetCode with Python】 Palindrome Number
- Eclipse+PyDev+Django+Mysql搭建Python web开发环境
- dedecms整合安装discuz!包括ucenter、uchome
- opengl 屏幕 窗口 视口 裁剪区