动态数组的实现方法

用指针动态分配数组

当编写程序时,常常很难为数组估计合适的大小,较为方便的做法是等到程序运行时再来确定数组的是实际大小。其方法是允许程序执行期间为数组分配空间,然后通过只想数组的第一个元素的指针访问数组。常用函数:mallocrealloc
malloc:为数组分配内存空间
realloc:根据需要对数组进行“扩展”或者“缩小”
下面我们来讲具体的实现:

  1. 使用malloc函数为数组分配存储空间

可以使用malloc函数为数组分配存储空间,我们需要使用sizeof运算符来计算出每个元素所需要的空间数量。假设正在编写的程序需要n个整数构成的数组,这里的n可以再程序执行期间计算出来。
首先声明指针变量:

int a;

一旦n的值已知了,就让程序调用malloc函数维数组分配存储空间:

a = malloc(n * sizeof(int));

一旦a指向动态分配的内存块,就可以忽略a是指针的事实,可以把它用作数组的名字。这都要感谢C语言中数组和指针的紧密关系。例如下列循环可以对a指向的数组进行初始化:

for(i = 0; i < n; i++)
	a[i] = i;

同时,用指针算数运算代替取下标操作来访问数组元素也是可行的。

  1. 使用realloc函数调整数组的大小

一旦为数组分配完合适的内存,稍后可能会发现数组过大或者过小。realloc函数可以调整数组的大小使他更合适需要。下列realloc函数额圆形出现在<stdlib.h>中:

void *realloc(void *ptr, size_t size);

当调用realloc函数时,ptr指针必须指向先前通过malloc或realloc的调用获得的内存块。size表示内存块的新尺寸,新尺寸的可能会大于或小于原有尺寸。虽然realloc函数不要求ptr指向正在用作数组的内存,但实际上通常是这样的。

  1. free函数

free函数在<stdlib.h>中有下列原型:

void free(void *ptr);

使用free函数很容易,只需要简单的吧指向不再需要内存块的指针传递给free函数就可以了:

p = malloc(...);
q = malloc(...);
free(p);
q = p;

调用free函数会释放p所指向的内存块,然后其内存块可以被后续的malloc函数或其他内存分配函数的调用重新使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值