gpt4 book ai didi

c - 如何初始化大小由argc和argv决定的二维数组?

转载 作者:行者123 更新时间:2023-12-04 12:18:55 29 4
gpt4 key购买 nike

我正在编写代码来跟踪每次访问数组中的特定元素。数组本身将根据用户的输入动态分配,因此我所看到的函数都不是我要找的。更具体地说,如何动态分配数组的行和列,然后将每个元素初始化为0?例如
./SIM A B

int* array_columns = malloc(atoi(argv[1]) * sizeof(int));
int* array_rows = malloc(atoi(argv[2]) * sizeof(int));
int array[*array_rows][*array_columns];

我所看到的一切都需要事先知道每行/列中的元素数量。任何人都可以提供有关如何将此数组初始化为 0 的任何指示吗?编辑:我在尝试建立数组的地方添加了行

最佳答案

该程序使用命令行参数分配内存并创建一个可以使用数组语法访问的变量。它使用 calloc 将值初始化为零:

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
int **array;

int length = atoi(argv[1]);
int width = atoi(argv[2]);

array = calloc(length, sizeof(int *));
for (int i = 0; i < length; i++) {
array[i] = calloc(width, sizeof(int));
}

for (int i = 0; i < length; i++) {
for (int j = 0; j < width; j++) {
printf("array[%d][%d] = %d\n", i, j, array[i][j]);
}
}

for (int i = 0; i < length; i++) {
free(array[i]);
}
free(array);

return 0;
}

编译为

gcc -Wall -Werror -o scratch scratch.c

输出

[user@machine]: ./scratch 3 5
array[0][0] = 0
array[0][1] = 0
array[0][2] = 0
array[0][3] = 0
array[0][4] = 0
array[1][0] = 0
array[1][1] = 0
array[1][2] = 0
array[1][3] = 0
array[1][4] = 0
array[2][0] = 0
array[2][1] = 0
array[2][2] = 0
array[2][3] = 0
array[2][4] = 0

注意

我省略了输入验证和错误检查以使示例变小。

编译器选项

我使用 -Wall -Werror 打开所有警告并将它们视为错误。这意味着编译器不会生成可执行文件,除非所有警告原因都已修复。 -o scratch 告诉编译器如何命名输出文件。

关于c - 如何初始化大小由argc和argv决定的二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55172407/

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