编写一个函数,接受二维整数数组作为输入并返回其中所有元素的总和

问题描述 投票:0回答:1

我想编写一个函数,它接受 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;
}
arrays c pointers
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.