当前位置:  开发笔记 > 编程语言 > 正文

我可以用这种方式制作动态阵列吗?

如何解决《我可以用这种方式制作动态阵列吗?》经验,为你挑选了2个好方法。

所以我的代码是这样的:

int a, b;
printf("Give dimensions\n");
scanf("%d %d", &a, &b);
double array1[a][b];
printf("Give values\n");
int i, j;
for(i=0; i

我的问题是,我被告知这是一种分配内存的错误方法,我应该使用malloc.我应该使用用户的维度创建一个动态数组.

编辑:程序的其余部分:

double sum=0;
for(i=0; i

StoryTeller .. 6

取决于你如何定义"正确".这是C99以来的合法C.

但问题是,如果ab太大,数组将溢出调用堆栈.如果这是一个可能的情况,你应该更喜欢malloc.与堆相比,调用堆栈通常被分配得相当小.所以这可能是建议的来源.

请注意,您仍然可以使用动态分配的数组来享受数组下标表示法:

double (*array)[b] = malloc(sizeof(double[a][b]));

数组在一个连续的块中,VLA指针将导致a[i][j]引用正确的元素.



1> StoryTeller ..:

取决于你如何定义"正确".这是C99以来的合法C.

但问题是,如果ab太大,数组将溢出调用堆栈.如果这是一个可能的情况,你应该更喜欢malloc.与堆相比,调用堆栈通常被分配得相当小.所以这可能是建议的来源.

请注意,您仍然可以使用动态分配的数组来享受数组下标表示法:

double (*array)[b] = malloc(sizeof(double[a][b]));

数组在一个连续的块中,VLA指针将导致a[i][j]引用正确的元素.



2> Sourav Ghosh..:

不,这是完全正确和有效的方式,只要您使用支持可变长度数组的编译器版本/环境.

这是一个强制性功能,C99但再次选择C11.

使用VLA和"指针和内存分配器功能组合"之间的主要区别是

VLA是块范围的.VLA不在作用域之外,因此它不能从函数返回并在调用者中使用,这与指针和malloc方法不同.

通常,VLA在堆栈中分配用于所有主要实现,因此尺寸受限.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有