为什么在C语言中使用大小时要用星号?

问题描述 投票:0回答:1

所以这个问题源于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就足以代表大小了。

谁能告诉我为什么?

c pointers
1个回答
1
投票

因为你定义了一个函数参数 int* matrixColSize 如果你删除 * 在5.行,你基本上说增加j直到地址的 matrixColSize.

而且这个数字非常大,因为像0x88644278这样的地址。所以这就是为什么我猜你的内存溢出了。如果你想只用int,你必须把你的函数参数改为 bool findNumberIn2DArray(int** matrix, int matrixSize, int matrixColSize, int target) 而在5.行中,你可以不写星号。

© www.soinside.com 2019 - 2024. All rights reserved.