二维数组和二维指针相换转换使用

在牛客网剑指offer的礼物最大值题目中 有一个答案如下,采用二级指针传入二维数组,传入之后直接使用二维数组的方式调用,能够通过测试,而VS2017必须在传入之后加上int(gridTest)[3] = (int)grid;强制转换才可以使用
题目和答案链接https://www.nowcoder.com/practice/2237b401eb9347d282310fc1c3adb134?tpId=265&tqId=39288&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D13&difficulty=undefined&judgeStatus=undefined&tags=&title=

\* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param grid int整型二维数组 
 * @param gridRowLen int grid数组行数
 * @param gridColLen int* grid数组列数
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int maxnum(int a,int b){
    return a>b?a:b;
}
int maxValue(int** grid, int gridRowLen, int* gridColLen ) {
    // write code here
    //经典动态规划问题 dp[i][j]表示第i行 j列 最大的礼物
    //dp[i][j]=max(dp[i-1][j],dp[i][j-1])+arr[i][j]
    if(grid==NULL)
        return 0;
    int dp[200][200];
    int(*gridTest)[3] = (int*)grid;//VS2017中必须加上此语句才能正常执行下一条语句
    dp[0][0]=grid[0][0];
    for(int i=1;i<gridRowLen;i++)
        dp[i][0]=dp[i-1][0]+grid[i][0];
    for(int i=1;i<*gridColLen;i++)
        dp[0][i]=dp[0][i-1]+grid[0][i];
    for(int i=1;i<gridRowLen;i++){
        for(int j=1;j<*gridColLen;j++){
            dp[i][j]=maxnum(dp[i-1][j],dp[i][j-1])+grid[i][j];
        }
    }
    return dp[gridRowLen-1][*gridColLen-1];
}


这篇文章讲的很详细,请看:矩阵相乘(二维数组的运用)