2017-05-24 14 views
0

宿題の割り当てについては、2Dマトリックス上で動作する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は実際にはサイズが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; 
} 
+0

私は初期値を固定する自由も取った。配列に負の数が含まれる場合はどうなりますか? 'max'を' 0'に初期化するとそこに間違った結果が与えられます。 C++でこのようなコードを励ますべきではありませんが、宿題は興味深い質問を出す傾向がありません。 '。 :( –

0

the_arrayはそれを意味double.I上のポインタのポインタでなければなりません: double find_max(double **the_array, int row_size, int col_size)

関連する問題