如何将二维数组传递给函数以及如何调用它

时间:2011-09-26 06:16:09

标签: c++ arrays

我已经尝试了很多时间将数组传递给函数然后做一些计算,比如获取列的总数,问题是我不知道如何从函数中调用结果,通常我得到错误

这只是我昨天试图解决的一个代码:

#include <iostream>
using namespace std;

//prototype
int get_total(int whatever[][2], int row);

int main ()
{
    const int row=2;
    const int col=3;

    int marks[row][col];

    // this is prompt the user to input the values
    for (int i=0; i<row;i++)
    {
        for (int p=0; p<col; p++)
        {
            cin >> marks[i][p];
        }
        cout << endl;
    }

    // this is just display what the user input as a table
    for (int x=0; x< row ; x++)
    {
        for (int y=0; y<col ; y++)
        {
            cout << marks[x][y] << "  ";
        }
        cout << endl;
    }

    int sum;

    // this is the most important thing I want to know,
    // how to call the function :(
    sum=get_total(marks,row);

    return 0;
}

// to get the total of each columns
const int row=3;
// not sure if the declaration is correct or not :(

int get_total(int whatever[][2], int row)
{
    for (int i=0; i < 2; i++)
    {
        for (int p=0; p < 3; p++)
            int total=0;
        //this line is completly wrong, How can I calculate the total of columns?
        total+=get_total[2][p];
    }
    // do we write return total ?
    // I'm not sure because we need the total for each column

    return total;
}

抱歉这个烂摊子,我感谢任何帮助解释将多维度arry传递给函数作为参数以及如何调用函数&gt;

2 个答案:

答案 0 :(得分:1)

调用函数时,数组会衰减为指针。

你可以做两件事:

  • 将行数和列数作为参数传递给函数。

  • 请改用std::vector。我建议你看看它,它会做的伎俩,你会学到一些新的和非常有用的东西。

此外,您的功能应该这样做:

int get_total(int** whatever)
{
    //total is 0 at the beginning 
    int total=0;
    for (int i=0; i < 2; i++)
    {
        for (int p=0; p < 3; p++)
            //go through each element and add it to the total
            total+=whatever[i][p];
    }    
    return total;
}

这将返回整个矩阵的总和,我假设你的意思是getting the total of the columns

答案 1 :(得分:0)

int marks[row][col]

这意味着marks的类型为int[2][3]

int get_total(int whatever[][2], int row);

但您已宣布get_total接受int(*)[2]int[2][3]可以拒绝int(*)[3],但与int(*)[2]不兼容,因此您无法将marks传递给get_total。您可以改为声明get_total接受int(*)[3]

int get_total(int whatever[][3], int row);
// equivalent to:
int get_total(int (*whatever)[3], int row);

如果您决定宣布get_total接受int**int*,那么在前一种情况下,您无法合法地将marks传递给它,并且你不能合法地迭代后者的整个多维数组。考虑不使用数组,这种方式更简单。