使用指针算法搜索二维数组
Posted
技术标签:
【中文标题】使用指针算法搜索二维数组【英文标题】:Searching a 2D array with pointer arithmetic 【发布时间】:2017-05-24 16:36:51 【问题描述】:对于家庭作业,我们被告知要编写 sum、find_max 和 find_min 等对 2D 矩阵进行运算的函数。我会使用这样的东西来正常找到最大值。
double find_max(double *the_array, int row_size, int col_size)
double maxValue = *the_array[0][0];
for (int i = 0; i < col_size; i++)
for (int j = 0; j < row_size; j++)
if (*the_array[i][j] > maxValue)
maxValue = *the_array[i][j];
但是,我们被告知在这项作业中使用指针而不是数组。我猜这意味着我需要使用指针算术来遍历数组,但我不知道该怎么做。我使用什么样的循环?我怎么知道什么时候告诉它停止?
【问题讨论】:
“但是,我们被告知在这项作业中使用指针而不是数组。”您的代码已经在使用指针,显示的代码中没有数组。还有double maxValue = *the_array[0][0]
应该做什么? O_o
要双重取消引用,您需要一个双指针作为参数double **the_array
。
【参考方案1】:
the_array 应该是双精度指针的指针。我的意思是:
double find_max(double **the_array, int row_size, int col_size)
【讨论】:
【参考方案2】:像这样 您的 the_array 实际上只是大小为 row * col 的线性内存。
double find_max(double *the_array, int row_size, int col_size)
double *iterator = the_array;
double *end = the_array + row_size * col_size;
double max = DBL_MIN;
while (iterator < end)
if (*iterator > max)
max = *iterator;
++iterator;
return max;
【讨论】:
我还冒昧地修复了初始值。如果数组包含负数怎么办?将max
初始化为 0
会在那里给出错误的结果。 ...并不是说我们应该鼓励在 C++ 中编写这样的代码,但家庭作业往往不会提出有趣的问题,而不是“重新发明<algorithm>
”。 :(以上是关于使用指针算法搜索二维数组的主要内容,如果未能解决你的问题,请参考以下文章