讨论/题目交流/请教:力扣OJ(线上代码评测)是如何实现二维数组传参,函数内数组下标访问的?/
请教:力扣OJ(线上代码评测)是如何实现二维数组传参,函数内数组下标访问的?

已知形如下面的代码在力扣的线上评测是可以顺利运行的。

int func(int **nums, int numSize, int *numColSize) {
    if (nums[i][j] == 0) { ... }
    ...
}

但是我自己像下面这样写是不行的

int func(int **nums, int numSize, int *numColSize) {
    if (nums[i][j] == 0) { ... }
    ...
}
int main()
{
    ...
    int nums[4][5];
    func(nums, ...); // 这样传参是不能实现内部对num的下标访问的
    ...
}

我能理解的是二维数组nums[4][5]对应的指针是数组指针,它的类型应该描述为(int *)[5]
要定义一个这样的指针应该这样int (*p)[5] = nums;,这样编译器才会知道怎么根据下标去正确计算偏移地址。

...
int **p = nums;
printf("%d\n", p[1][1]); // 无法正确计算p[1][1]

那么力扣OJ是如何做到的呢?

展开讨论

点右上角的background .<_ ,然后可以查看相关代码。

2
展开全部 2 讨论