0

私のコードの何が問題になっていますか?配列を出力したいのですが、出力しようとすると、代わりにアドレスが出力されるようです。

#include <iostream>
#include <ctime>
#include <stdlib.h>

using namespace std;

int main ()
{
    srand(time(NULL));

    int array[9]= {0};

    for (int i=0;i<=8;i++)
    {
        array[i]= (rand()%101);
    }

    cout<< array;

    system ("PAUSE");
    return 0;
}
4

5 に答える 5

4

cout配列だけではいけません。配列は使用できませんcoutcout型の何かに成功するときはいつでも、それは型の値のために特別に設計されTた専用のオーバーロードされた演算子があることを意味します。また、 (文字列を除いて)配列を-ingするための専用の演算子はありません。このため、コンパイラーは、指定された引数タイプに最も近いもの、つまりポインターの演算子を選択します。配列はポインタに変換可能であるため、ここで適用できます。<<coutT<<cout<<<<

cout配列のすべての要素の値が必要な場合は、手動coutで1つずつ行うか、標準のアルゴリズムを使用する必要があります。例えば

std::copy(array, array + 9, std::ostream_iterator<int>(std::cout, " "));
于 2012-04-18T04:25:58.083 に答える
2

各配列要素を独自に出力するには、ループを実行する必要があります。

問題は、C ++が配列のサイズを常に認識しているとは限らないため、デフォルトですべてを出力することができないことです。

于 2012-04-18T04:17:02.560 に答える
1

配列を反復処理し、各インデックスで値を割り当てた方法と同じように各要素を出力する必要があります。配列はシーケンスの最初の要素へのポインタに減衰するため、アドレスを取得しています。

于 2012-04-18T04:17:11.297 に答える
0

std::coutのオーバーロードがないためint array[9]、これはポインタ()に減衰し、int*これが表示されます(のようなもの0x7fffe47142d0)。

配列内のintsを個別に出力するには、ループ構造(配列の入力に使用している-loopなど)を使用し、各sを順番にfor送信する必要があります。おそらく空白を使用してフォーマットします。intstd::cout

C ++とその標準ライブラリのコツをつかんだら、でこれを行う方法を調査することをお勧めしますがstd::copy()、これは宿題としては少し進んでいると思います。

于 2012-04-18T04:25:27.710 に答える
0

C ++は、値が引数として関数に渡されると、配列型をポインター型に減衰させます。C ++ 11には、配列のサイズを保持するstd::array(およびTR1が指定する)があります。std::tr1::array使用するように変更された例を次に示しますstd::array

#include <array>
#include <iostream>
#include <ctime>
#include <stdlib.h>

template<typename T, std::size_t N>
std::ostream& operator<< (std::ostream& ostm, const std::array<T, N>& a)
{
  for (auto const& x : a)
    ostm << x << ' ';

  return ostm;
}

int main ()

{
    srand(time(NULL));

    std::array<int, 9> array;
    for (auto& x : array)
        x = rand() % 101;

    std::cout<< array << std::endl;
}
于 2012-04-18T04:26:32.280 に答える