开发者

How to pass two dimensions array to a function and how to call it

I've tried many time to pass the array to a function then do some calculation such as getting the total of the columns, the problem is I don't know how to call the result form the function, usually I get errors.

this is just one code I'm trying to solve it from yesterday :

#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;
}

sorry for the mess, and I appreciate any help to explain passing the multidimensions arry to a function as parameter and how to call the functio开发者_高级运维n>


Arrays decay to pointers when calling functions.

You can do 2 things:

  • Pass the number of lines and columns as arguments to the function.

  • Use std::vector instead. I suggest you take a look at it, it'll do the trick and you'll learn something new and very useful.

Also, your function should do this:

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;
}

This will return the total for the whole matrix, I'm assuming that's what you mean by getting the total of the columns


int marks[row][col]

This means that marks has type int[2][3].

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

You've however declared get_total to accept an int(*)[2]. int[2][3] can decay to int(*)[3] but that is not compatible with int(*)[2], hence why you can't pass marks to get_total. You can instead declare get_total to accept an int(*)[3]:

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

If you instead decide to declare get_total to accept an int** or an int*, then you can't legally pass marks to it in the former case, and you can't legally iterate over the whole multidimensional array in the latter. Consider not using arrays, it's simpler this way.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜