gpt4 book ai didi

c - 尝试更改 C 中二维数组中的元素

转载 作者:行者123 更新时间:2023-11-30 19:03:10 27 4
gpt4 key购买 nike

我想在函数 make2Darray 中实现,以使二维数组中的元素与行号相对应。

打印和释放的代码的其他部分已经给出,所以不必担心。我只想接触 make2Darray 函数。然而,在该函数中,还给出了分配部分。因此,我要更改的唯一代码是更改 2D 数组中的元素的部分。

int** make2Darray(int width, int height) {
int **a;
int i = 0;
int j = 0;

/*allocate memory to store pointers for each row*/
a = (int **)calloc(height, sizeof(int *));
if(a != NULL) {
/* allocate memory to store data for each row*/
for(i = 0; i < height; i++) {
a[i] = (int *)calloc(width, sizeof(int));
if(a[i] == NULL) {
/* clean up */
free2Darray(a, height);
return NULL; /*aborting here*/
}
}
}
/* from this point down is the part I implemented, all code above was
given*/
if (height < 0 && width < 0) {
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
a[i][j] = j;
}
}
}
return a;
}

假设二维数组中的元素对应于行号如果高度 = 4 且宽度 = 3

0  0  0
1 1 1
2 2 2
3 3 3

但是,我总是得到 0,这是我获取代码时的默认设置

0  0  0
0 0 0
0 0 0
0 0 0

最佳答案

代码中有两个主要问题。

1) 初始化二维数组的代码应位于 if block 内部

2) if (height < 0 && width < 0) {错了 - 你想要>而不是<

尝试:

int** make2Darray(int width, int height) {
int **a;
int i = 0;
int j = 0;

/*allocate memory to store pointers for each row*/
a = (int **)calloc(height, sizeof(int *));
if(a != NULL) {
/* allocate memory to store data for each row*/
for(i = 0; i < height; i++) {
a[i] = (int *)calloc(width, sizeof(int));
if(a[i] == NULL) {
/* clean up */
free2Darray(a, height);
return NULL; /*aborting here*/
}
}

// Moved inside the if(a != NULL) {

/* from this point down is the part I implemented, all code above was
given*/
if (height > 0 && width > 0) { // Corrected this part
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
a[i][j] = j;
}
}
}

}
return a;
}

一些提示:

1)在函数的开头检查高度和宽度 - 例如:

if (height <= 0 || width <= 0) return NULL;

2) 原型(prototype)make2Darray(int width, int height)对我来说似乎落后了,因为我们通常在列计数之前提到行计数。我更喜欢:make2Darray(int height, int width) 。我什至更喜欢术语“行”而不是“高度”和“列”而不是“宽度”。

3) 您当前的代码在 if(a != NULL) { 中执行“所有实际操作”没关系,但如果你这样做的话,代码(对我来说)会更清晰 if(a == NULL) return NULL;

4) 无需施放calloc

通过这些更新,代码可能是:

int** make2Darray(int rows, int columns) {
int **a;
int i = 0;
int j = 0;

if (rows <= 0 || columns <= 0) return NULL;
a = calloc(rows, sizeof(int*));
if(a == NULL) return NULL;

/* allocate memory to store data for each row*/
for(i = 0; i < rows; i++) {
a[i] = calloc(columns, sizeof(int));
if(a[i] == NULL) {
/* clean up */
free2Darray(a, rows);
return NULL; /*aborting here*/
}
}

/* from this point down is the part I implemented, all code above was
given*/
for (i = 0; i < rows; i++) {
for (j = 0; j < columns; j++) {
a[i][j] = j;
}
}

return a;
}

关于c - 尝试更改 C 中二维数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54475287/

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