所以这个问题源于Leetcode。
在一个n*m的二维数组中,每行从左到右递增排序,每列从上到下递增排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组是否包含整数。
而我的C语言解决方案是
1 bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){
2 //return matrixSize==5;
3 for(int i = 0; i < matrixSize; i++)
4 {
5 for (int j = 0; j < *matrixColSize; j++)
6 {
7 int num = matrix[i][j];
8 if (num == target) {return true;}
9 if (num > target) {break;}
10 }
11 }
12 return false;
13}
在第5行,必须是 *matrixColSize
. 如果我去掉星号,内存就会溢出。从我的角度来看, matrixColSize
是一个INT。为什么我不能直接使用int,而要用指针?
也许我的问题没有说清楚。我知道这是一个指针,我也知道指针和int完全不同。我的问题是,为什么这道题在这里要用指针来定义? matrixColSize
但不是只用和INT?从我的角度来看,这里用INT就足以代表大小了。
谁能告诉我为什么?
因为你定义了一个函数参数 int* matrixColSize
如果你删除 *
在5.行,你基本上说增加j直到地址的 matrixColSize
.
而且这个数字非常大,因为像0x88644278这样的地址。所以这就是为什么我猜你的内存溢出了。如果你想只用int,你必须把你的函数参数改为 bool findNumberIn2DArray(int** matrix, int matrixSize, int matrixColSize, int target)
而在5.行中,你可以不写星号。