将2D数组传递给函数

时间:2019-03-16 22:46:37

标签: c++ arrays

我有问题。我正在创建一个矩阵计算器。我想要的是选择矩阵的大小。我有两个二维数组(a)和(b),我用整数填充数组。问题是整数(我保存在数组中的常数)没有出现,只是它们所在的位置。只是指针似乎没有取消引用。不知道怎么了。

void rotater(int* a,int* b,int select)
{        
    int* matrix;

    if(select == 1)
    {
        for(int d = 0; d < i; d++)
        {
            for(int c = 0; c < j; c++)
            {
                cout << *(a+c) << *(a+d) << " "; 
                //if i choose the size as 2x2 this comes out as a 
                //matrix {11,12;21,22} just as positions not my 
                //numbers that i choose
            }
            cout << endl;
        }
    }
    else  if(select == 2)
    {
        for(int d = 0; d < y; d++)
        {
            for(int c = 0; c < x; c++)
            {
                cout << *(b+d) <<*(b+c) <<" ";
            }
            cout << endl;
        }
    }   
}

int a[i][j];
int b[x][y];
int *matrix1 = &a[0][0];    
int *matrix2 = &b[0][0];

cout << endl;
cout << "Choose_matrix: " << "(1,2,both)" << endl;
cin >> matrix;

f = matrix //I have function that changes char matrix to int f

cout << endl;
cout << "Choose_operand: " << "(rotr,rotl,+,-,*,/,diag)" << endl;
cin >> operand;

e = operand // I have function that changes char operand to int e

switch(e)
{
case 1:
    rotater(matrix1, matrix2, f); // calling function with 3 parameters 
    break;

default:
    return 0;
}

1 个答案:

答案 0 :(得分:1)

C样式代码

首先,您正在使用C ++,因此应尽可能避免使用C样式数组和原始指针。我建议您使用std::vector<int>,或者,因为您想要一个恒定的大小,std::array<int>

冗余代码

我不明白为什么在rotater函数中包含两个数组。每个参数的逻辑相同,那里有很多冗余代码。

参数类型

您在rotater中的参数要求输入int*,但是在调用该函数时,会给它一个int[][],它是另一种数据类型。

工作示例

所有这些,您的代码中有很多东西,没有明确的功能。最重要的是,您没有包含main()函数,因此我无法编译您的代码。如果是我,我将通过调试器运行您的程序,以了解发生了什么事。这就是我相信你要去的。

#include <iostream>

void matrix_display(int *mat, const int x_size, const int y_size)
{
    for ( int x = 0; x < x_size; x++ )
    {
        for ( int y = 0; y < y_size; y++ )
        {
            std::cout << *(mat + x) << *(mat + y) << " ";
        }
    }

    std::cout << std::endl;
}

int main()
{
    const int X_SIZE = 2;
    const int Y_SIZE = 2;
    int matrix[X_SIZE*Y_SIZE] = {4, 7, 3, 7};

    matrix_display(matrix, X_SIZE, Y_SIZE);

    return 0;
}

再次,如果是我,我会使用std::array<std::array<int, 2>, 2>而不是int*