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

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

动态数组(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个字节,函数的返回值是新分配的存储空间的首地址,与原来分配的首地址不一定相同】

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5593001.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存