为什么函数返回0

Why does the function return 0?

本文关键字:返回 函数 为什么      更新时间:2024-09-28

我有一个函数,它应该取一个矩阵,比较矩阵的对角元素,找到最小的一个。

在这里,它应该比较y[0][1]y[1][0]

#include <iostream>
int Min(int, int [][2]);
using namespace std;
int main() {
int min, y[2][2];
y[0][0]=5;
y[0][1]=4;
y[1][0]=-9;
y[1][1]=0;
min = Min(2, y);
cout<<min;
return 0;
}  
int Min(int k, int x[][2]){
int min=x[0][0];
for(int i=0; i<k;i++){
if(x[i][i]<min){
min=x[i][i];
}
}
return min;
}

它总是返回0。为什么?

这里应该比较y[0][1]和y[1][0]。

函数通过矩阵的对角线,因此它检查y[0][0]y[1][1]。它们分别是5和0。结果为零,这是意料之中的事。

这里应该比较y[0][1]y[1][0]

但这不是你在这里说的:

int min=x[0][0];

或此处:

if(x[i][i]<min){
min=x[i][i];
}

由于i不能同时为0和1,因此这将访问x[0][0]x[1][1]

对于这些元素,0是正确的最小值。

附带说明一下,Min函数只能处理大小为2的矩阵,因此k参数是不必要的。多维数组就是这样让人讨厌。

要迭代所有项,而不仅仅是[0][0][1][1],您需要执行以下操作:

for(int i=0; i<k; i++)
{
for(int j=0; j<k; j++)
{
if(x[i][j]<min)
{
min=x[i][j];
}
}
}
int Min(int k,const int x[][2])
{
int min=x[0][0];
for(int i=0; i<k;i++)
{
for(int j=0;j<k;j++)
{
if(x[i][j]<min)
{
min=x[i][j];
}
}
}

早些时候,它总是显示零,因为它的列索引一团糟。Outer for循环迭代k-1次,第一次迭代在i=0,第二次迭代在i=1,在两次迭代期间,它为行和列分配相同的索引(即x[0][0]和x[1][1](。也许它必须分配索引x[0][0]、x[0][1]、x[1][0]、x[1][1]。早些时候,它只有两次迭代(outer-for循环(,但现在需要四次迭代,将适当的索引分配给列和行的次数是有效的。