在c ++中的函数内打印2D数组

时间:2016-09-08 22:13:43

标签: c++ arrays

我在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作为输出。这是什么原因?

2 个答案:

答案 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()中创建一个新数组。