为什么函数返回0
Why does the function return 0?
我有一个函数,它应该取一个矩阵,比较矩阵的对角元素,找到最小的一个。
在这里,它应该比较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循环(,但现在需要四次迭代,将适当的索引分配给列和行的次数是有效的。
相关文章:
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 接收和返回函数指针的函数指针的类型?
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- C++函数链返回函数
- 返回函数指针的函数的签名
- 由于值返回函数中的错误,程序无法编译.它说未声明的标识符
- 非常量引用返回函数在常量值返回函数上用作 r 值
- 如何在 C++ 中从 void 返回函数访问变量
- 返回函数中带有 2 个可选 ctor 的对象
- 如何在 c++ 中返回函数的结构向量
- 返回 C++ 函数中的引用
- 使用向量时,当返回函数更改时,无法看到输出
- 如何在递归中使用返回函数
- 返回函数模板的类型C++作为第二个模板参数
- 为什么静态指针返回函数中有一个"静态"键?
- 递归返回函数,在特殊情况下不返回
- 从类返回函数
- 从类成员函数返回函数指针
- 从返回函数中推断不存在的模板参数