在C ++中返回二维数组对角元素之和的函数[重复]

Posted

技术标签:

【中文标题】在C ++中返回二维数组对角元素之和的函数[重复]【英文标题】:Function Which Returns Sum of Diagonal Elements of 2D Array in C++ [duplicate] 【发布时间】:2019-12-11 14:25:10 【问题描述】:

我需要创建一个函数来计算矩阵对角线上元素的总和,签名为int diagonal(int array[4][4])

这是我尝试过的:

int diagonal(int array[4][4])
    int sum = 0;

    for (int i = 0; i < 4; i++)
        for (int j = 0 ; j < 4; j++)
            if (i == j)
            sum = sum + array[i,j];
            
        
    
return sum;




#include <iostream>

extern int diagonal(int[][]);
int main ()
    int array[4][4] = 1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4;
    std::cout << "The sum is: " << diagonal(array) << std::endl;    
    return 0;

但它会产生一些错误消息,我似乎不明白为什么会这样:

main-1-1.cpp:3:27: error: multidimensional array must have bounds for all dimensions except the first
 extern int diagonal(int[][]);
                           ^
main-1-1.cpp: In function ‘int main()’:
main-1-1.cpp:6:47: error: too many arguments to function ‘int diagonal()’
  std::cout << "The sum is: " << diagonal(array) << std::endl; 
                                               ^
main-1-1.cpp:3:12: note: declared here
 extern int diagonal(int[][]);
            ^
function-1-1.cpp: In function ‘int diagonal(int (*)[4])’:
function-1-1.cpp:8:14: error: invalid conversion from ‘int*’ to ‘int’ [-fpermissive]
    sum = sum + array[i,j];

有人可以向我解释一下吗?

【问题讨论】:

他们只想要左上角到右下角对角线的总和吗? sum = sum + array[i,j]; 更改为 sum = sum + array[i][j]; @0x499602D2 是的! 【参考方案1】:
int diagonal(int array[][4])
    int sum = 0;

    for (int i = 0; i < 4; i++)
        for (int j = 0 ; j < 4; j++)
            if (i == j)
            sum = sum + array[i][j];
            
        
    
return sum;




#include <iostream>

extern int diagonal(int[][4]);
int main ()
    int array[4][4] = 1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4;
    std::cout << "The sum is: " << diagonal(array) << std::endl;    
    return 0;

您可以在第一个 [ ] 中输入任何数字,但编译器会忽略它。将向量作为参数传递时,您必须指定除第一个维度之外的所有维度。 简而言之,您不需要在函数声明中为第一个 [ ]

传递值

【讨论】:

知道了!谢谢你的解释!【参考方案2】:

这个问题的答案在这里Passing a 2D array to a C++ function

尝试这种方式,它会更简单一些

#include <iostream>
int diagonal(int array[][4])

    int sum = 0;
    for(int I = 0; I < 4; I++)
    
        sum += array[I][I];
    
    return sum;


int main()

    int array[4][4] = 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4;
    std::cout << "sum is " << diagonal(array) << std::endl;
    return 0;

【讨论】:

这听起来很糟糕,但如果这回答了您的问题,您能否将其标记为答案并为我投票?我正在努力建立赏金的声誉

以上是关于在C ++中返回二维数组对角元素之和的函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

php中计算二维数组中某一元素之和的函数是那个啊?谢谢……

c++返回二维数组的最大元素和它所在的行、列号?

怎样求数组中元素重复的次数

求C语言二维数组元素排列组合?

c语言中怎么用二维数组作为函数参数

C-二维数组, 字符串, 指针