一尘不染

可变大小数组与C中的calloc

algorithm

在这里讨论动态内存:“ C指针和动态内存简介”

作者指出:

这样的存储块可以有效地用作更灵活的阵列。实际上,这种方法在现实世界的C程序中更为常见。它也比“可变大小数组”更具可预测性和灵活性

他正在谈论的内存块类型如下:

const int size = 5;
int * array = calloc(size, sizeof(int));

然后使用另一个指针遍历数组:

int * index = array;
for (i = 0; i < size; i++) {
    *index = 1; // or whatever value
    index++;
}

我的问题是,这种方法如何比像这样的标准可变大小数组更好?:

int array[variable];

或动态:

char name[] = "Nick";

关于为什么我应该选择前一种方法而不是后者,作者并没有真正阐明。或更具体地讲:它如何更具“可预测性和灵活性”?


阅读 302

收藏
2020-07-28

共1个答案

一尘不染

如果您声明int array[variable]将在堆栈上分配内存,这对于大型,相对永久的数据结构(例如您可能要返回的数据结构)来说不是很好。如果使用数组语法,则无需手动释放内存,因为它在超出范围时会释放。calloc另一方面,它将在运行时在堆上动态分配内存。完成后,您将必须自己释放它。

2020-07-28