使用指针算法搜索二维数组

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++ 中编写这样的代码,但家庭作业往往不会提出有趣的问题,而不是“重新发明&lt;algorithm&gt;”。 :(

以上是关于使用指针算法搜索二维数组的主要内容,如果未能解决你的问题,请参考以下文章

二维数组搜索FloodFill算法

EmptyStackException - 二维数组上的 Java 深度优先搜索算法

快速排序算法实现(二维数组)

C语言如何定义指针指向字符型二维数组

memcpy()对二维数组和二维指针操作的区别

如何在c语言二维数组中使用指针