前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >malloc()动态分配内存概述

malloc()动态分配内存概述

作者头像
孙晨c
发布2019-09-10 19:14:56
8260
发布2019-09-10 19:14:56
举报
文章被收录于专栏:无题~无题~

动态内存分配和释放:

  动态构造一维数组:

    假设动态构造一个Int型数组:

代码语言:javascript
复制
1 int *p = (int *)malloc(int len);
2 //还可以写作:
3 int *p = (int *)malloc(sizeof(int)*len);
4 int *p = (int *)malloc(sizeof(len));
5 数据类型 *p = (数据类型 *)malloc(sizeof(数据类型)*长度);

  1.malloc只有一个int型的形参,表示要求系统分配的字节数

  2.malloc函数的功能是请求系统分配len个字节的内存空间,如果请求成功,则返回第一个字节的地址,如果请求失败,则返回NULL。

  3.malloc函数能且只能返回第一个字节的地址,所以我们需要把这个无任何实际意义的第一个字节的地址(俗称干地址)转化成一个有实际意义的地址,nalloc函数前面必须加(数据类型 *),表示把这个无实际意义的第一个地址转化为相应类型的地址。如:

代码语言:javascript
复制
1 int *p = (int *)malloc(50);

  表示将系统分配好的50个字节的第一个字节的地址转化为int *类型的地址,更准确的说是把第一个字节的地址转化为四个字节的地址,这样p就指向了第一个的四个字节,p+1就指向了第2个的四个字节,p+i就指向了第i+1个的四个字节。p[0]就是第一个元素,p[i]就是第i+1个元素。

代码语言:javascript
复制
1 double *p = (double *)malloc(80);

  表示将系统分配好的80个字节的第一个字节的地址地址转化为double*类型的地址……

程序运行结束需要释放内存

代码语言:javascript
复制
1 free(p) ;//释放p所指向的内存,而不是释放p本身所占用的内存
代码语言:javascript
复制
 1 #include<stdio.h>
 2 # include <malloc.h>
 3 int main(){
 4     int a[5]={1,2,3,4,5};//静态分配
 5     int len;
 6     printf("输入你需要分配的数组的长度:len=");
 7     scanf("%d",&len);
 8     int *pArr = (int *)malloc(sizeof(int) * len);
 9     //*pArr = 4;  //pArr等价于数组名a,*pArr等价于a[0]
10    // pArr[1]=10;//类似于a[1]=10
11     //所以使用动态分配内存后,可以将pArr当作数组名处理了,因为它是第一个元素的地址
12     for(int i=0;i<len;i++){
13         scanf("%d",&pArr[i]);
14     }
15     for(i=0;i<len;i++){
16         printf("%d\n",*(pArr+i));
17     }
18     free(pArr);//把pArr所代表的动态分配的20个字节的内存释放
19     return 0;
20 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 动态内存分配和释放:
    •   动态构造一维数组:
      •     假设动态构造一个Int型数组:
  • 程序运行结束需要释放内存
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档