gpt4 book ai didi

我可以这样制作一个动态数组吗?

转载 作者:太空狗 更新时间:2023-10-29 15:11:29 26 4
gpt4 key购买 nike

所以我的代码是这样的:

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<a; i++)
{
for(j=0; j<b; j++)
{
scanf("%lf", &array1[i][j]);
}
}

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

编辑:程序的其余部分:

double sum=0;
for(i=0; i<a; i++)
{
for(j=0; j<b; j++)
{
sum = sum + array1[i][j];
}
printf("Line %d: sum = %lf\n", i+1, sum);
sum=0;
}

最佳答案

取决于你如何定义“正确”。自 C99 以来,这是合法的 C。

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

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

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

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

关于我可以这样制作一个动态数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41743854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com