C语言学习【18】-动态内存分配

传统数组的缺点:

1、数组长度必须事先制定,且只能是常整数,不能是变量;

eg:

int a[5] ;//OK
int len = 5; int a[len];   //Error

2、传统形式定义的数组,在函数运行期间该数组的内存程序员无法手动释放(只能系统释放),系统为该函数中数组所分配的空间会一直存在,直到数组所在函数运行完毕时,数组的空间才会被系统释放。

3、数组的长度一旦定义,其长度就不能再更改

     数组的长度不能再函数运行的过程中动态的扩充或者缩小

4、A函数定义的数组,在A函数运行期间可以被其他函数使用,但A函数运行完毕之后,A函数中的数组将无法再被其他函数使用,因为数组所占内存被释放了

为什么需要动态内存分配?

为了克服以上传统数组的缺陷。

#include <stdio.h>
#include <malloc.h>

int main(void)
{
    int i = 5;
    int * p = (int *)malloc(4);
/*
1、要使用malloc()函数,必须要添加malloc.h头文件
2、malloc函数只有一个形参,并且形参是整形
3、4表示请求系统为本程序分配4个字节
4、malloc函数只能返回已分配内存的首字节地址(意在指分配的内存是连续的单元)
5、该行分配了两个块内存:一个是 p变量,静态内存空间;一个是malloc(4),动态内存空间(可被强制转化)
6、p本身所占的内存是静态分配的,p指向的的内存是动态分配的
*/
    *p = 5;
    free(p);


return 0;
}
发布了23 篇原创文章 · 获赞 1 · 访问量 1594

猜你喜欢

转载自blog.csdn.net/qq_41505080/article/details/104216087
今日推荐