C++指针数组参数

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])

Naw*_*waz 5

函数签名应该是这样的:

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)