博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针做参数的动态内存分配与二重指针(上)
阅读量:5069 次
发布时间:2019-06-12

本文共 1603 字,大约阅读时间需要 5 分钟。

C中的动态内存分配问题:

格式:Int *pointer;

Pointer = (int *)malloc(100 * sizeof(int));

可以在被调用函数(该函数返回指针的函数)中动态分配内存,(并且该内存是分配在堆内存中的,故而被调函数可以返回指向该堆内存的指针),然后返回该指针值,该指针指向动态分配的内存,然后可以在主函数freepointer。哪怕在主函数中将该指针值赋值给pointer_2freepointer_2也是可以的,(可以理解的,它们都指向该堆内存),以避免出现内存泄漏。

对二维数组的动态内存分配与释放,我们知道在C++中直接int *pointer = new int[3][4]; 然后delete []pointer即可,C++可以直接对二维数组进行动态内存分配与释放。但是在C中,要么动态内存分配pointer= int *)malloc(12 * sizeof(int)),也即直接分配一块连续的内存存放12个数组元素,而后free一次pointer;要么分配3块连续的动态内存分别存放4的数组元素,而后free三次pointer。后者需要用到指针数组来存放3个动态内存指针:int *pointer[3];注意与指向一位数组的指针区别:int (*pointer)[3].

第二种方法是挺复杂的。涉及到指针数组的动态内存分配问题。二重指针通常与指针数组一同使用,也即定义一个二重指针指向指针数组,可以理解的两种方法范例源代码见下篇。

二重指针与指针数组的使用也是一定要注意的,还不熟练。

int **pointer;int *pointer_array[4];        //指针数组要对数组元素赋值,也即对数组里面的指针元素赋地址值,而非对指针元素指向的整型数据赋数值,otherwise编译出错pointer = pointer_array;      //指针数组的数组名仍然代表地址

 

ATTENTION:

/**pointer = pointer_array + 1   //这是合法的,pointer + 1 代表了数组pointer_array中第二个指针元素的地址pointer= pointer_array[1]    //这是非法的,pointer_array[1]代表了数组pointer_array中的第2个元素,也即数组中盛放的第二个指针, 我们是想把第二个指针的地址赋给pointer,而不是把第二个指针赋给pointer,会报错:error: cannot convert 'int*' to 'int**' in assignmentpointer_array[1]仅仅是指针,而pointer是指针的指针。**/

 上一段源码: 

#include 
int main(){ int **pointer; int *p[3]; int a = 1; int b = 2; int c = 3; p[0] = &a; p[1] = &b; p[2] = &c; pointer = p; //pointer = p[0]; ///好好研究此处啊,它和上一行是不同的!!!看看error!! printf ("%d\n", *(*(pointer + 2))); return 0;}

 

如果要设计一个被调函数,该函数返回一个指向指针类型的指针,比如返回一个指针数组的地址,也就是返回一个二重指针,它的定义形式如下:  

Int **allocation(parameter_1, parameter_2, ...)

转载于:https://www.cnblogs.com/gzl0928/p/7765944.html

你可能感兴趣的文章
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
IOS-图片操作集合
查看>>
模板统计LA 4670 Dominating Patterns
查看>>
团队项目开发客户端——登录子系统的设计
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
session如何保存在专门的StateServer服务器中
查看>>
react展示数据
查看>>