在做题过程中发现,有时候需要将一个二维数组传递到另外一个函数中去。
假如为栈数组,可以这样做:
void Fun(int* dp, int m, int n) {
if(*((dp+i*n)+j)==3) { //*((dp+i*n)+j)为dp[i][j]
......
}
}
main {
int dp[m][n];
Fun((int*)dp, m, n);
}
也就是说,需要将dp强制转化为一个int指针,作为实参传进Fun函数。
假如为动态数组,可能更复杂一些。
void Fun(int** dp) { //注意这里的参数类型
dp[i][j] //可以直接通过下标的方式,访问dp[i][j]
}
main {
int **dp = new int*[m]; //定义指针数组dp
for(int i = 0 ; i <m; i++)
dp[i] = new int[n]; //对于指针dp[i],开辟一个大小为n的一维数组,使得dp[i]指向这个数组
for(int i = 0; i<m; i++) //先释放各个一维数组
delete[](dp[i]);
delete []dp; //释放指针数组
}