8.7 动态内存分配与指向它的指针变量

01

什么是内存的动态分配

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

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

02

怎么建立内存的动态分配

1、malloc函数

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

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

2、calloc函数

函数原型:void *calloc(unsigned n,unsigned size);

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

3、free函数

函数原型:void free(void *p);

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

4、realloc函数

函数原型:void *realloc(void *p,unsigned int size);

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

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

03

void指针类型

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

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

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

有时候,正是那些意想不到之人,成就了无人能成之事。

——图灵

文字/闫小林

图片/源于网络

- END -

本文分享自微信公众号 - C语言入门到精通(yclzl960229)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的知识天地

Python奇技淫巧

本文用作记录,在使用python过程中遇到的一些奇技淫巧,有些代码是本人所写,有些则是python内置函数,有些则取之互联网。在此记录,只为备份以及遗忘时方便查...

29430
来自专栏数据挖掘

【机器学习】算法原理详细推导与实现(二):逻辑回归 logistic函数逻辑回归鸢尾花分类

在上一篇算法中,线性回归实际上是 连续型 的结果,即 \(y\in R\) ,而逻辑回归的 \(y\) 是离散型,只能取两个值 \(y\in \{0,1\}\)...

18130
来自专栏诸葛青云的专栏

这段C语言程序虽然很简单,但是我工作多年的同事还是弄错了

前两天,我在我的圈子里发了一个小问题,相关的C语言代码如下,这段程序会输出什么呢?

8400
来自专栏音视频技术

NEON技术如何实现移动端视频高效解码AV1?

https://medium.com/@ewoutterhoeven/how-arms-neon-enables-efficient-av1-decoding-...

13830
来自专栏前端加油站

ES6知识库汇总三

版权声明:本文为博主原创文章,未经博主允许不得转载。 ...

9850
来自专栏嵌入式大杂烩

【C语言笔记】函数参数压栈的顺序?

按照日常习惯来看,C语言的函数参数压栈顺序是从左到右吧?但是事实却是相反的,C语言函数参数压栈顺序是从右到左的。下面看一个程序:

20220
来自专栏达达前端

第43节:Java学前要点

学习Java,有人推荐去培训,有人说没用,其实有钱的,不知道如何学,或者逼不得已去的就可以,也有人自己为了不花这些钱,而选择自学,我觉得也行。

10860
来自专栏浩Coding

小白Linux入门--入门篇(二):Linux下的shell编程入门

我们在Linux下编程,不可避免的会用到shell编程,编写一些简单的shell脚本可以实现很多使用的功能,比如我们微信公众号需要用到的开机tomcat和n...

10130
来自专栏浩Coding

编程知识科普--(2)什么是计算机编程中的低级语言和高级语言

我们常常听到高级语言,低级语言等等,但是只是一知半解,比如Java和C等等是高级语言,而汇编是低级语言,那么他们之间的区别是什么呢,我从网上总结了一些观点,...

15540
来自专栏奔跑的键盘侠

不会点儿编程的你,正在失去职场竞争力

蔡康永在《奇葩说5》中说过这样一句话:快乐仰仗外来的东西而喜悦发自内心,我们小时候很容易快乐,我们第一次吃到冰淇淋,第一次滑冰、看电影,这些都是外来的东西给我们...

11910

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励