2017-03-09 8 views
-3

ランダム化されたintで配列を作成しました。私が最大の&を見つけようとしているのは、2つの異なる関数でポインタを使用することです。ポインタを使用したときのトラブル

しかし、私の問題の1つは、私が最も低い要素を見つけるために比較すると、配列の最初の要素が見つかった最小値に変わるということです。

 // Compare to find min value 

     min = array; 
     for (int i = 0; i < size; i++) 
     { 
      if (*min > *(min + i)) 
       *min = *(min + i); 
     } 

     // show array using pointer 

     ptr = resetArray;  // Fill int *ptr with original array 

     for (int i = 0; i < size; i++) 
     { 
      std::cout << *(ptr + i) << std::endl; 
     } 

この比較が行われた後、* minの値が配列の最初の要素に置き換わります。

私の悪い英語のために申し訳ありません!

+0

で配列にアクセスします。 – ForceBru

+0

これはちょうど '* min = *(min + i);と同じです。あなたは何をしようとしましたか? – Beta

+0

それはポインタを使うとどうなるでしょう。配列を変更したくない場合は、分を格納するスタンドアロン変数が必要です。 – NathanOliver

答えて

0

ポインタがどのように機能しているのか誤解しているかもしれません(多分簡単な間違いかもしれません)。 のようなポインタは、intを追跡するための変数ではありません。int*のようなポインタは、intを追跡する変数ではありません。int*のようなポインタは、intを追跡するための変数ではありません。 int*ポインタを使用すると、の変数にアクセスし、intを追跡できます。ポインタは、他のいくつかのメモリ位置に「ポイント」します。それが彼らのためのものです。

あなたの場合、minは配列の整数を指しています。 minは、整数用の独立したストレージではありません。 array[i] == *minが、等価な整数を持つために起こっただけではないという事実。 これらは同じメモリ位置を指しています。 1つを変更すると、同じメモリの場所なので、もう一方を変更します。

あなたはおそらくあなたが持っているあなたの現在のループ&ポインタのスタイルを維持したいと仮定すると、代わりに何をしたいのか、配列を反復処理するために別々のポインタを持つことで、反復ポインタに等しい(*minない)min設定しました。それは次のとおりです。

int* iterator; 
for(...) 
    if(*iterator < *min) 
     min = iterator 
    iterator += 1; 

個人的に、私はちょうどあなたが `*分= *(分+ I)`でそれを自分で変更array[i]

0

ポインタminは配列の最初の値を指すようにします。したがって、この値は上書きされます。代わりに、あなたがC++を使用するので、あなたは機能std::minmax_elementを使用して検討するかもしれない、要素がである配列という非ポインタ型、例えば:いずれの場合においても

auto min = array[0]; 
    for (int i = 1; i < size; i++) 
    { 
     if (min > array[i]) 
      min = array[i]; 
    } 

のようを宣言する必要があります。

関連する問題