动态数组的实现方法

it2023-10-10  67

用指针动态分配数组

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

使用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;

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

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

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

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

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

free函数

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

void free(void *ptr);

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

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

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

最新回复(0)