将两个2D数组传递给函数c ++

时间:2015-12-07 05:05:22

标签: c++ arrays function

我正在尝试创建一个程序,从用户那里获取两个矩阵的输入。然后将输入的数据传递给另一个函数,然后进行计算。两个矩阵的总和传递给第三个函数以打印输出。

我面临的问题是在函数之间传递数组,否则代码的逻辑很好。

我的代码存在的问题是我没有获得打印功能的输出。此外,add函数不进行任何计算,因为我认为数组中的数据不会被传递。

有人可以向我解释一下我在路过时做错了什么。

const int MTRX_MAX = 3;

//Function Prototypes
void Get_Matrix(); //Ask the user for input
void Add_Matrix(int matrix1[][MTRX_MAX], int matrix2[][MTRX_MAX], int sum[][MTRX_MAX]); //Calculates the sum of the matrecies
void Print_Matrix(int matrix1 [][MTRX_MAX], int matrix2 [][MTRX_MAX]); //Printout the inputed data

int main()
{
    int matrix1[MTRX_MAX][MTRX_MAX];
    int matrix2[MTRX_MAX][MTRX_MAX];
    int sum[MTRX_MAX][MTRX_MAX];

    Get_Matrix();
    Add_Matrix(matrix1,matrix2,sum);
    Print_Matrix(matrix1, matrix2,sum);

    return 0;
}

//Function Definetions
void Get_Matrix() 
{
    int matrix1[3][3] = { 0 };
    int matrix2[3][3] = { 0 };

    cout << "Enter the first Matrix: \n";

    for (int i = 0; i < MTRX_MAX; i++)
    {
        for (int j = 0; j < MTRX_MAX; j++)
        {
                cin >> matrix1[i][j];
        }
    }
    ////////////////
    cout << "Enter the second Matrix: \n";

    for (int i = 0; i < MTRX_MAX; i++)
    {
        for (int j = 0; j < MTRX_MAX; j++)
        {
                cin >> matrix2[i][j];
        }
    }
}

void Add_Matrix(int matrix1[][MTRX_MAX], int matrix2[][MTRX_MAX], int sum[][MTRX_MAX]) 
{
        for (int i = 0; i < 3; i++)
        {
                for (int j = 0; j < 3; j++)
                {
                        sum[i][j] = matrix1[i][j] + matrix2[i][j];
                }
        }

}

void Print_Matrix(int matrix1[][MTRX_MAX], int matrix2[][MTRX_MAX]) 
{
        for (int i = 0; i < MTRX_MAX; i++)
        {
                for (int new_line = 0; new_line < 1; new_line++)
                {
                        for (int j = 0; j < MTRX_MAX; j++)
                        {
                                cout << sum[i][j] << " ";
                        }
                        cout << endl;
                }
        }
}

节目输出:

  

输入第一个矩阵:

     

1 2 3 4 5 6 7 8 9

     

输入第二个矩阵:

     

9 8 7 6 5 4 3 2 1

     

-1717986920 -1717986920 -1717986920   -1717986920 -1717986920 -1717986920   -1717986920 -1717986920 -1717986920

     

按任意键继续。 。

2 个答案:

答案 0 :(得分:1)

在评论中:

for (int new_line = 0; new_line == 1; new_line++) //The condition 'new_line==1' doesn't really seems to be fulfilled
            {
                for (int j = 0; j < MTRX_MAX; j++)
                {
                    cout << matrix1[i][j] << " ";
                }
                cout << endl;
            }

你最终什么都不打印。

更新1:您实际上不需要额外的循环for (int new_line = 0; new_line == 1; new_line++)

更新2:void Print_Matrix(int matrix1[][MTRX_MAX], int matrix2[][MTRX_MAX])确实知道代码中的int sum[i][j]。事实Print_Matrix(matrix1, matrix2,sum);与您的声明和定义相矛盾。

答案 1 :(得分:1)

Get_Matrix将用户输入存储到局部变量中。当函数返回时,它们超出范围,丢弃数据。您的原型看起来对于传递它们的函数传递2D数组是正确的。当您想要传递可变维度2D数组时,事情会变得更加棘手,但是除了第一个维度之外的所有维度都是编译时常量的情况下,它是正确的。

Get_Matrix需要采用与其他矩阵函数(非常量)相同的args,并将矩阵存储到调用者提供的空间中。

(另一种方式是使用全局变量,而不是传递指针,但不要这样做。)

使用调试器会向您显示main返回时未设置Get_Matrix个数组。