数据结构入门(四)——预备知识(3)——动态内存分配与释放

前言

本系列文章是笔者学习数据结构的笔记,如有不妥之处欢迎指正



为什么要动态分配内存

  • 以数组为例,定义一个含有5个元素的数组的时候,系统会一次分配给程序5个元素的内存空间,但是实际使用不一定会用到全部的5个元素的空间,因此会造成空间浪费。
  • 以数组为例,除非关闭并修改程序否则不能改变输入数据的最大组数
  • 即不能做到随用随分配,随用随释放,动态内存分配能够解决以上的问题
  • 动态内存:程序运行时内存不够可以动态的分配,内存用完后可以动态释放

内存分配与释放的概念

  • 内存分配:操作系统将部分内存的使用权限给予程序
  • 内存释放:操作系统回收该部分内存的使用权限,但是但是并不会清空内存中的遗留数据

sizeof()函数

  • 功能: 计算数据所占空间的字节数(内存大小)
    用于数据类型
    sizeof(数据类型)
    用于变量
    sizeof(变量名)

malloc()函数

  • 头文件: malloc()函数在stdlib.h这个头文件中,因此在使用前应先在程序中包含该头文件
  • 动态分配内存
#include <stdio.h>
#include<stdlib.h>
int main()
{
    int len;

    int a[5] = {1,2,3,4,5};

    scanf("%d",&len); //输入所需元素个数

    int *p = (int *)malloc(sizeof(int )*len); //函数前方的(int *)表示强制类型转换
                                              //函数括号中的sizeof(int )*len表示申请的内存的大小,
                                              //其中sizeof()函数返回int型变量所占字节数
                                              //该数与输入的数相乘得到所需的字节数
    *p = 5;           //等价于a[0] = 5;
    p[4] = 1;         //等价于a[4] = 1;

    printf("%d %d", *p, p[4]);
    return 0;
}

对程序输入

5

输出结果为

5 1

  • 为何需要强制类型转换
    malloc()函数只能返回第一个字节的地址,但是第一个字节的地址没有实际含义(不能确定多少个字节作为一个变量)

free()函数

  • 头文件: 同样地free()函数在stdlib.h这个头文件中,因此在使用前应先在程序中包含该头文件
  • 动态释放内存
#include <stdio.h>
#include<stdlib.h>
int main()
{
    int len = 2; 
    
    int *p = (int *)malloc(sizeof(int )*len);  //动态分配内存
    
	free(p);    //动态释放内存
		        //把p所代表的动态分配的内存释放
    
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值