我已经尝试了很多时间将数组传递给函数然后做一些计算,比如获取列的总数,问题是我不知道如何从函数中调用结果,通常我得到错误
这只是我昨天试图解决的一个代码:
#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;
答案 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
传递给它,并且你不能合法地迭代后者的整个多维数组。考虑不使用数组,这种方式更简单。