【发布时间】:2020-06-15 07:42:11
【问题描述】:
我正在尝试取消引用函数 islandPerimeter 中的二维数组。
但我不明白为什么我会为此遇到段错误。
有人能指出我到底做错了什么吗?
更新: 所以这是我试图解决的 leetcode 问题的一部分。我现在明白它不是二维数组而是指针。我仍然对 int** 感到困惑。有人可以解释一下吗?
#include <stdio.h>
int islandPerimeter(int** grid, int gridSize, int gridColSize)
{
int perimeter=0,points=4,i=0;
for(int row=0;row<gridSize;++row)
{
for(int col=0;col<gridColSize;++col)
{
printf("%d ",grid[row][col]);
}
}
return perimeter;
}
int main()
{
int arr[4][5] = {{8,1,0,0,0},
{1,1,1,0,0},
{0,1,0,0,0},
{1,1,0,0,0}};
islandPerimeter(arr,4,5);
return 0;
}
【问题讨论】:
-
int[][]与int **不同 -
编译器无法知道您传入的 int** 的尺寸。我不知道它为什么会编译或出现段错误,但我可以看到如果没有这些信息它就无法正常工作. Chris 的解决方案是正确的。
-
@donjuedo 取决于编译器及其标志,它只会针对不兼容的类型发出警告。
-
int** grid-->int (*grid)[5] -
int** grid不是二维数组。grid是一个指针。
标签: c arrays multidimensional-array segmentation-fault