0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言怎么建立内存的动态分配

jf_78858299 来源:C语言 作者:闫小林 2023-03-10 15:30 次阅读

C语言内存动态分配

在C语言中,全局变量是分配在内存中的静态存储区的,非静态的局部变量,包括形参是分配在内存中的动态存储区的,这个存储区是一个“栈”的区域。

C语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放。这些数据是临时存放在一个特别的自由存储区,称为“堆”。

C语言怎么建立内存的动态分配

malloc函数

函数原型
void *malloc(unsigned int size);

其作用是在内存的动态存储区分配一个长度为size的连续空间。形参size的类型定为无符号整型。此函数是一个指针型函数,返回的指针指向该分配域的开头位置。

calloc函数

函数原型

void *calloc(unsigned n,unsigned size);

其作用是在内存的动态存储区中分配n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组。

free函数

函数原型

void free(void *p);

其作用是释放指针变量p所指向的动态空间,使这部分空间能重新被其他变量使用。

realloc函数

函数原型

void *realloc(void *p,unsigned int size);

如果已经通过malloc函数或者calloc函数获得了动态空间,想改变其大小,可以用realloc函数重新分配。

C99标准把意思malloc、calloc、realloc函数的基类型定为void类型,这种指针称为无类型指针。

C语言void指针类型

指向void类型应该理解为指向空类型或者不指向确定的类型的数据。

把void指针赋值给不同基类型的指针变量时,编译系统会自动进行转换,不必用户自己进行强制转换。

内存的动态分配主要应用于建立程序中的动态数据结构中。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    3081

    浏览量

    74598
  • C语言
    +关注

    关注

    180

    文章

    7618

    浏览量

    138678
  • 指针
    +关注

    关注

    1

    文章

    483

    浏览量

    70710
收藏 人收藏

    评论

    相关推荐

    FreeRTOS内存动态分配吗?

    你可能会好奇:FreeRTOS可以创建任务,也可以删除任务,它是动态分配内存吗?
    的头像 发表于 03-24 09:55 2302次阅读
    FreeRTOS<b class='flag-5'>内存</b>是<b class='flag-5'>动态分配</b>吗?

    C语言知识总结:动态内存分配

    动态内存分配就 是指在程序执行的过程中动态分配或者回收存储空间的分配内存的方法。
    发表于 10-24 15:52 933次阅读

    C语言既然可以自动为变量分配内存,为什么还要用动态分配内存呢?

    不知道大家在学习C语言动态分配内存的时候有没有过这样的疑问,既然系统可以自动帮我们分配内存,为什
    发表于 12-13 11:14 1134次阅读

    使用C语言实现简单动态内存分配

    首先要明白为何需要动态内存分配,熟悉C语言的读者应该对这个比较熟悉,需要一段内存时会使用malloc函数来申请所需要大小的
    发表于 07-28 16:26 728次阅读
    使用<b class='flag-5'>C</b><b class='flag-5'>语言</b>实现简单<b class='flag-5'>动态内存</b><b class='flag-5'>分配</b>

    C语言程序设计中动态内存分配如何实现

    C语言程序设计中,动态内存分配如何实现,需要注意哪些问题?
    发表于 09-28 16:53 1524次阅读

    怎么在LL2和DDR3上用malloc同时动态分配内存

    程序中需要用malloc动态分配两块内存,分别在LL2和DDR3上,请问用cmd动态分配的空间都是在.sysmem里面吗?怎么在两块内存中都动态
    发表于 06-21 09:29

    请教关于在堆区的动态分配内存问题

    ;]CmplxSgn_t;在定义信号之后会动态分配一段arrayLen长的内存给ptSignalArray,在信号的使命结束后会把内存释放掉。但是俺刚接触dsp不久,有资料说频繁的申请/释放
    发表于 08-07 08:29

    为什么lwip建立TCP客户端时不动态分配本地端口?

    最近这两天,在做EtherNet/IP协议。STM32作为客户端,连接远程服务端。现在遇到一个问题,在建立TCP客户端时,远程端口为44818,分配的本地端口一直为49153。按照我对TCP的了解,本地端口应该是动态分配的,为什
    发表于 08-29 20:48

    嵌入式C语言动态内存分配

    memset函数free内存时,需要把指针变量置为NULL,防止其变为野指针memset(void* Dst, int Val, size_t size)作用:把Dst中大小为size的内容全部由Val替换符合编程规范的动态分配内存
    发表于 12-14 06:37

    请问使用动态内存分配安全吗?

    在使用完毕后,需要显式的释放之,这就要求程序员对动态分配内存了然于胸。在非常重视安全(safety-critical)的嵌入式C语言程序开发中,
    发表于 12-15 06:10

    使用动态内存分配安全吗

    安全吗?”为了更加安全稳定,美国军方禁止在C语言程序中使用malloc()使用动态内存分配安全吗?在C
    发表于 12-15 07:44

    动态分配内存知识

    最近学习动态分配内存 这个程序是我自己编的,呵呵,好有成就感啊... #include stdio.h/*Feng原创...*/ #define N 2 char *GetCity(void
    发表于 05-28 15:27 99次下载

    零矢量动态分配的-直接转矩控制

    零矢量动态分配的-直接转矩控制
    发表于 01-21 11:49 1次下载

    动态内存分配的注意事项及本质是什么

    C语言中比较重要的就是指针,它可以用来链表操作,谈到链表,很多时候为此分配内存采用动态分配而不是静态分配
    的头像 发表于 10-13 15:37 3619次阅读
    <b class='flag-5'>动态内存</b><b class='flag-5'>分配</b>的注意事项及本质是什么

    51单片机内存动态分配

    51单片机内存动态分配序言最近玩51单片机碰到一个问题,51中malloc函数并不能像在PC上一样正常运行,这涉及到了内存池的概念。下面就来演示一下如何在单片机上也可正常使用动态内存
    发表于 11-12 14:36 11次下载
    51单片机<b class='flag-5'>内存</b><b class='flag-5'>动态分配</b>