在这里讨论动态内存:“ 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";
关于为什么我应该选择前一种方法而不是后者,作者并没有真正阐明。或更具体地讲:它如何更具“可预测性和灵活性”?
如果您声明int array[variable]将在堆栈上分配内存,这对于大型,相对永久的数据结构(例如您可能要返回的数据结构)来说不是很好。如果使用数组语法,则无需手动释放内存,因为它在超出范围时会释放。calloc另一方面,它将在运行时在堆上动态分配内存。完成后,您将必须自己释放它。
int array[variable]
calloc