汉扬编程 C语言入门 C语言动态内存管理和动态内存分配

C语言动态内存管理和动态内存分配

动态内存管理同时还具有一个优点:当程序在具有更多内存的系统上需要处理更多数据时,不需要重写程序。标准库提供以下四个函数用于动态内存管理:

(1) malloc()、calloc()

分配新的内存区域。

(2) realloc()

调整已分配的内存区域。

(3) free()

释放已分配的内存区域。

上述所有函数都声明在头文件 stdlib.h 中。对象在内存中所占空间的大小是以字节数量为单位计算的。许多头文件(包括 stdlib.h)专门定义了类型 size_t 用来保存这种内存空间的相关信息。例如,sizeof 运算符以类型 size_t 返回字节数量。

动态内存分配两个内存分配函数 malloc()和 calloc()的参数不一样:

void*malloc(size_t size);函数 malloc()分配连续的内存区域,其大小不小于 size。当程序通过 malloc()获得内存区域时,内存中的内容尚未决定。

void*calloc(size_t count,size_t size);函数 calloc()分配一块内存区域,其大小至少是 count_size。换句话说,上述语句分配的空间应足够容纳一个具有 count 个元素的数组,每个元素占用 size 个字节。而且,calloc()会把内存中每个字节都初始化为 0。

两个函数都返回 void 指针,这种指针被称为无类型指针(typeless pointer)。返回指针的值是所分配内存区域中第一个字节的地址,当分配内存失败时,返回空指针。

作者:周梦康

C语言编程技巧:以实例跟我学动态数组的创建及使用方法

问题提出在C语言编程中,对于普通数组的定义,如定义一个包含10个int类型元素的一维数组a,我们采用下面的方式:

C语言动态内存管理和动态内存分配

int a[10];

C语言动态内存管理和动态内存分配

这种方式定义的数组是静态数组,其特点是定义方便,无需管理其内存的占用情况,但其缺点是一旦定义后,其数组的长度就固定了,而不能动态的改变其大小。

C语言动态内存管理和动态内存分配

但是,在很多情况下,数组元素的个数我们是无法事先确定的。如定义一个数组,用来存储给定的已知数组中所有大于3的元素,很明显,这个数组的大小是不确定的,用静态数组的定义方式是不合适的,除非你定义的数组大小足够大,能包括足够多的元素,但这样会造成内存的浪费。所以,这种场合下动态数组就派上用场了。

在C语言中提供了诸如内存的申请、释放等管理函数,然后结合指针可以按需动态地分配内存空间,来构建动态数组,达到有效利用计算机内存资源的手段。

基本函数说明C语言中用于动态数组操作的函数主要包括malloc、calloc、realloc和free等,每个函数的原型、参数意义及功能说明如下表所示:

下面通过一个例子演示动态数组的创建及使用方法。

例子说明编写一个控制台程序,能够创建包含n个元素的动态数组,其n值由用户输入,数组里面存储的内容是n个0-9之间的随机数。可以通过输入不同的n值反复创建不同个数的动态数组,当n值输入小于等于0的数值时,程序退出。

C语言实现代码完整的C语言实现代码如下:

代码简要解释如下:

第9行,定义一个指向int型的指针p,其对应的内存空间用以存储动态数组的元素。

第13-14行,输入动态数组的元素个数,存储到变量n中。

第16行,使用malloc函数申请能包含n个元素(n*4个字节)的地址空间,将返回的void型指针强制转换为指向int型的指针赋予p。

第19-22行,为动态数组中的每个元素赋值(0-9之间的随机数)。

第25-29行,在控制台上打印动态数组中的每个元素。

第31-36行,使用free函数释放动态内存。

程序运行结果如下图所示:

总结C语言中关于动态数组的编程,需要注意的是,在动态数组使用完毕后,不要忘记使用free函数将动态申请的内存释放,否则会造成内存泄露。

如果你觉得这篇文章对你有用的话,请不要忘记点赞哦。

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/cjia/6179.html

一元二次方程的根 ax平方 bx c=0 C语言 编程序

C语言中静态库和动态库简介

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部