这是一个来自拼图的真实案例。
#include <stdio.h>
#include <stdlib.h>
#define ROWS 10
#define COLS 8
void process_array(int array[ROWS][COLS]) {
int i,j, count =0;
for (i=0; i< ROWS ;i++)
for(j=0 ; j<COLS; j++)
array[i][j]= count++;
}
int main() {
int **array = malloc( sizeof(int)*ROWS*COLS);
process_array(array);
/** int i,j;
for (i=0; i< ROWS ;i++){
for(j=0 ; j<COLS; j++)
printf("%d ",array[i][j]);
printf("\n");
}
**/
return 0;
}
问题。
(a) Bob 想知道 Alice 的代码是否正确。他取消注释从第 21 行到第 26 行的代码以输出数组的内容。他会得到什么结果?
(b) Alice 坚持她的代码是绝对正确的(这是真的)。如果 Bob 确实需要通过下标运算符访问主函数中的数组(即,array[i][j]
)访问主函数中的数组,他如何解决这个问题?
(c) Alice 将她的函数签名更改为
void process_array (int ** array ) ;
Bob 应该对主要功能进行什么/是什么相应的修改?
(d) 另一个学生 Charlie 建议 Bob 和 Alice 使用一维数组来模拟二维数组。Bob 然后将上述代码的第 18 行修改如下。
int * array=malloc ( sizeof ( int ) *ROWS *COLS ) ;
他应该对其余代码进行哪些进一步修改?让我们假设 Alice 想要回退到她原来的实现。
请给我帮助。非常感谢。