2017-05-24 76 views
0

對於作業分配,我們被告知要編寫像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]; 
      } 
     } 
    } 
} 

但是,我們被告知使用指針而不是數組來完成這個作業。我猜這意味着我需要使用指針算法來通過數組,但我不知道如何做到這一點。我使用什麼樣的循環?我怎麼知道什麼時候告訴它停止?

+2

「不過,我們被告知使用指針,而不是數組這個功課」。你的代碼已經在使用指針,你的代碼中沒有數組。還有什麼是'double maxValue = * the_array [0] [0]'應該做的? O_o – George

+0

要加倍取消引用,您需要一個雙指針作爲參數'double ** the_array'。 –

回答

0

像這樣 您的the_array實際上只是大小行*列的線性內存。

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; 
} 
+0

我也冒昧修復初始值。如果數組包含負數,該怎麼辦?將'max'初始化爲'0'將會給出錯誤的結果。 ......並不是說我們應該在C++中鼓勵這樣的代碼,但是作業並不傾向於提出有趣的問題,而不是'重塑''。 :( –

0

the_array應該是指針上double.I的指針指: double find_max(double **the_array, int row_size, int col_size)