栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

动态数组(C语言笔记+c语言初学者的个人理解,还请多多指教)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

动态数组(C语言笔记+c语言初学者的个人理解,还请多多指教)

动态数组(指针与动态数组内存分配函数联用)

【引言】

指针的用处:

(1)为函数提供修改变量值的手段

(2)为c语言的动态内存分配系统提供支持

(3)为动态数据结构提供支持(eg.链表,队列,二叉树)

(4)改善某些子程序的效率

1.函数malloc()

功能:会返回一个指向该内存首地址的指针,如果系统不能提供足够的空间,则会返回NULL

原型:void *malloc(unsigned int size);

【其中*malloc是指针函数,代表该函数会返回一个void类型的指针】

【void*类型指针——通用指针或者无类型指针,通常被用来说明基类型未知的指针(也就是说声明了一个指针,但是不知道他可以指向哪一种基类型的数据)】

【在malloc函数运用中如果要把函数返回值赋给某个指针,那么需要根据该指针的类型,将返回的指针值强行转为所需类型,然后再进行赋值操作。eg. int *pi=NULL;pi=(int*)malloc(2)  则是将 void*类型强制转换为int*,然后再赋值给int类型指针变量pi,即用int类型指针变量pi指向指向这段存储空间的首地址】

【不知道字节数的时候——malloc(sizeof(int))】

2.函数calloc()

功能:给若干同类型的数据项分配连续的存储空间,并将其赋值为0

原型:void *calloc(unsigned int num,unsigned int size);

【calloc函数相当于声明了一个一维数组】

【num表示向系统申请内存空间的数量,size表示申请的每个空间的字节数,确定了数组元素的类型】

【如果函数调用成功,会返回一个指向void的连续储存空间的首地址,否则会返回空指针NULL】

【与malloc相同的是,如果想要将函数的返回地址赋给某个指针变量,那么应该先根据这个指针的类型,强制性的将其转为与指针基类型相同的数据类型,然后再进行赋值操作。eg. float *pf=NULL; pf=(float*)calloc(10,sizeof(float))这里是指向系统申请10个连续的float类型存储单元,并用指针pf指向该连续内存的首地址,此时系统申请的总的内存字节数为10*sizeof(float),其实也就等同于pf=(float*)malloc(10*sizeof(float))】

小结:从安全的角度上考虑,函数calloc()要比函数malloc()更加安全,因为calloc()可以自动将分配的内存初始化为0

3.函数free()

功能:释放向系统动态申请的由指针p指向的存储空间

原型:void free(void*p);

【该函数没有返回值】

【唯一的形参p是由malloc()或者是calloc()申请内存的时候返回的地址】

【该函数执行以后,会将以前由p指向的内存返回还给系统,以便系统重新支配】

4.函数realloc()

功能:改变原来分配空间的大小

原型:void *realloc(void *p,unsigned int size);

【将指针p所指向的存储空间的大小改为size个字节,函数的返回值是新分配的存储空间的首地址,与原来分配的首地址不一定相同】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/587611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号