nau*_*uti 2 c++ arrays pointers arguments
我有以下代码:
void getPossibilities(int *rating[200][3]){
// do something
}
int main ()
{
int rating[200][3];
getPossibilities(&rating);
}
Run Code Online (Sandbox Code Playgroud)
这会引发以下错误消息:
错误:无法将int()[200] [3]转换为int()[3],参数1为void getPossibilities(int(*)[3])
函数签名应该是这样的:
void getPossibilities(int (*rating)[3]);
Run Code Online (Sandbox Code Playgroud)
并将参数传递为:
getPossibilities(rating);
Run Code Online (Sandbox Code Playgroud)
变量rating是一个二维形式的阵列T[M][N],可以衰变成一种形式的类型T(*)[N].所以我认为这就是你想要的.
正如在上面的解决方案中,阵列衰减,失去一个维度的大小(在你只能N可靠地知道的函数中,你只是M因阵列衰减而丢失),所以你要改变函数的签名以避免衰减数组:
void getPossibilities(int (&rating)[200][3]) //note : &, 200, 3
{
//your code
}
//pass argument as before
getPossibilities(rating); //same as above
Run Code Online (Sandbox Code Playgroud)
更好的是使用模板:
template<size_t M, size_t N>
void getPossibilities(int (&rating)[M][N])
{
//you can use M and N here
//for example
for(size_t i = 0 ; i < M ; ++i)
{
for(size_t j = 0 ; j < N ; ++j)
{
//use rating[i][j]
}
}
}
Run Code Online (Sandbox Code Playgroud)
要使用此函数,您必须像以前一样传递参数:
getPossibilities(rating); //same as before!
Run Code Online (Sandbox Code Playgroud)