我在c ++中制作了以下程序。我只想打印一个数组元素。我的代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
#define n 5
double dist[n][n];
void read_distances()
{
for(int i = 0; i < n ; i++)
{
for (int j = 0 ;j < n; j++)
{
cout<<dist[i][j]<<" ";
}
cout<<"\n";
}
}
main()
{
double dist[n][n] =
{
{0, 20, 30, 10, 11},
{15, 0, 16, 4, 2},
{3, 5, 0, 2, 4},
{19, 6, 18, 0, 3},
{16, 4, 7, 16, 0}
};
read_distances();
}
我只是想在read_distances()函数中打印dist [] []数组。但在这里,我将所有值0作为输出。这是什么原因?
答案 0 :(得分:2)
原因是你在dist
中声明了main()
数组,并初始化了它的内容,但函数read_distances
()打印了一个名为{{1的全局数组的值}}。它恰好与dist
范围内的dist
数组具有相同的名称,但它是一个完全不同的数组,并且永远不会被初始化。
main()
然后在void read_distances(double dist[n][n])
{
// ...
}
main():
(从技术上讲,read_distances(dist);
的参数实际上是read_distances()
,但这将成为另一天的主题,我不想让这太混乱了。)
答案 1 :(得分:0)
这个怎么样:
#include <iostream>
#include <cstdio>
using namespace std;
#define n 5
void read_distances(double dist[n][n])
{
for(int i = 0; i < n ; i++)
{
for (int j = 0 ;j < n; j++)
{
cout<<dist[i][j]<<" ";
}
cout<<"\n";
}
}
int main()
{
double dist[n][n] =
{
{0, 20, 30, 10, 11},
{15, 0, 16, 4, 2},
{3, 5, 0, 2, 4},
{19, 6, 18, 0, 3},
{16, 4, 7, 16, 0}
};
read_distances(dist);
}
您的代码无效,因为您使用在main创建的本地版本覆盖了dist
的全局版本。所以你要么不像我在这里那样使用全局的,要么将你在main()
创建的那个传递给你的打印功能;或者你填写那个数组而不在main()
中创建一个新数组。