相关疑难解决方法(0)

可变长度与Malloc-ed数组

根据c99标准,我们可以编写以下代码,这是完全合法的

int x;
scanf("%d",&x);
int ar[x];
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我可以分配这样的数组,为什么我需要malloc再次分配可变大小的数组?

另外,请您解释一下可变长度数组的分配情况如何?内心深处,是否调用malloc来分配数组或者是什么?

c arrays

8
推荐指数
2
解决办法
1672
查看次数

变量大小的数组与C中的calloc

关于动态内存的讨论:"C指针和动态内存简介"

作者说:

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

他正在讨论的内存块类型是这样的:

const int size = 5;
int * array = calloc(size, sizeof(int));
Run Code Online (Sandbox Code Playgroud)

然后使用另一个指针迭代数组:

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

我的问题是这个方法比这样的标准变量大小的数组更好吗?:

int array[variable];
Run Code Online (Sandbox Code Playgroud)

或动态:

char name[] = "Nick";
Run Code Online (Sandbox Code Playgroud)

作者并没有真正阐明为什么我应该更喜欢前一种方法.或者更具体地说:它如何更"可预测和灵活"?

c arrays algorithm malloc

7
推荐指数
2
解决办法
4万
查看次数

5
推荐指数
2
解决办法
5409
查看次数