C语言 动态内存分配函数

本文介绍了C语言中动态内存分配的重要性,并详细讲解了malloc(), calloc(), realloc()三个函数的使用方法及它们之间的联系。动态内存分配解决了静态内存空间的局限性,提供在程序运行时确定内存大小的灵活性。malloc()分配未初始化的内存,calloc()分配并初始化为0的内存,realloc()用于调整已分配内存的大小。" 133081162,20014352,知识图谱的基石:语义网络详解,"['知识图谱', '人工智能', '自然语言处理']
摘要由CSDN通过智能技术生成


前言

C中动态内存分配相关的三个函数:malloc()、calloc()、realloc()的使用


一、为什么要用动态内存

在c中开辟内存空间有两种方式:

1、静态开辟内存

int a;
int arr[10];

以这种方式开辟内存空间的特点:
(1)所开辟的内存空间是在栈中开辟固定大小的,入a是4字节,数组arr是40字节,并且数组在申明时必须是固定长度的大小,如果数组以以下方式开辟,则会报错。也就是数组的大小在初始化的时候必须给定,如果想在程序运行时才确定一个数组的大小这种方法是行不通的。

int n = 10;
int arr[n];

(2)一般栈的大小是1MB,如果想申请一块大于1MB的连续的内存空间,显然空间不足
此时就需要用另一种方式来开辟内存空间----动态开辟内存。

2、动态开辟内存

静态开辟内存空间的特点恰好就是动态开辟内存空间的优势,还是上面的例子,我们可以在程序运行的过程中确定数组大小,也就是我们可以依据n的大小来申请内存。

二、如何使用动态内存

在C语言中动态开辟空间需要用到三个函数:malloc()、calloc()、realloc(),这三个函数都是在堆中申请内存空间,所用头文件为 #include<stdlib.h> 。
在堆中申请的内存空间不会像栈中存储的局部变量一样,调用完自动释放,需要我们手动释放,用free()函数实现。

1、malloc()

void *malloc(size_t size);

<1> malloc() 函数的头文件还可以使用 #include<malloc.h>
<2> 功能:动态分配一段堆上连续内存但不进行初始化,默认是随机值,并且返回该内存的首地址,该函数不对申请的空间进行清空操作;
<3> 参数:size就是实际所需要的字节数
<4> 返回:返回值的类型是void *, void * 是一个通用类型的指针,可以依据需要进行强转
<5> 结果:
成功:堆上恰好有一块连续的内存可以使用,返回值为该空间的首地址
失败:有可能失败返回NULL
1> 堆内空间不够;
2> 堆内空间足够但是连续空间不足够

// malloc的使用
// malloc(n * sizeof(type)):n表示所需要空间的个数,type表示所需要申请空间的类型
    // 动态申请10个空间,每个空间是int类型
    int *p = (int *)malloc(10 * sizeof(int));
    // 动态申请20个空间,每个空间是char类型
    char *q = (char *)malloc(20 * sizeof(char));
    // 动态申请100个空间,每个空间是double类型
    double *d = (double *)malloc(100 * sizeof(double));
注:malloc() 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值