我想编写一个函数,它接受 2D 整数数组(用双星号表示)作为输入,该数组的大小为 n(数组的数量)和 m(每个数组的大小)。 作为输出,该函数应返回数组中所有元素的总和。请记住,C 中的数组是从 0 索引的!
我的代码如下,但总是输出错误的结果。
int two_d_sum(int ** arr, int n, int m) {
int sum = 0, t;
int* p = &(**arr);
for(int i = 0; i < n; ++i){
for(int j = 0; j < m; ++j){
t = *(p + i*m + j);
sum += t;
}
}
return sum;
} /* two_d_sum() */
该函数的调用方式如下:
int main() {
printf("Enter the number of arrays in the array (n): ");
int size_n;
scanf("%d%*c", &size_n);
printf("Enter the number of elements in the array in the array (m):");
int size_m;
scanf("%d%*c", &size_m);
int **arr = (int **)malloc(size_n * sizeof(int *));
for (int i = 0; i < size_n; i++) {
arr[i] = (int *)malloc(size_m * sizeof(int));
for (int j = 0; j < size_m; j++) {
int num;
printf("Enter a number: ");
scanf("%d%*c", &num);
arr[i][j] = num;
}
}
two_d_sum();
return 0;
}
按照编码,您假设该数组是一个平面二维数组(
int
数组的数组),但给定提供给您的函数原型,arr
是一个指向指向int
的指针数组的指针,可以使用独立分配的数组来实现。
您应该只使用指针,这非常简单:您需要做的就是使用嵌套的
for
循环进行迭代:
int two_d_sum(int **arr, int n, int m) {
int sum = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
sum += p[i][j];
}
}
return sum;
}