====== 配列の初期化の仕方 ====== ==== 初期化子の書き方 ==== * 以下のようにして初期化する * **型 変数名[要素数] = { 初期化子1, 初期化子2, 初期化子3, … , 要素数分の初期化子 };** * また、初期化子を並べると要素数が確定するので、要素数の指定を省略できる * **型 変数名[] = {初期化子1, 初期化子2, 初期化子3, … , 要素数分の初期化子 }; ** 補足:現在学んでいる配列は、コンパイル時に配列の要素数が確定している必要があるため、「cinなどで要素数を読み込んで、 その場で要素数分の変数を用意する」ことはできない! (後で習う、動的メモリ取得やSTLの動的配列を使えばできるよ!(今は我慢)) == 実際のコード例 == #include //使うものだけstd省略する設定 using std::cout; using std::cin; using std::endl; //これやるとお行儀悪いって言われるよ //using namespace std; //今日のお題:配列のお話 int main() { int a = 10;//変数aを初期化 //整数型の変数を10個用意(初期化子)して初期化 int var[10]={10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; //初期化子の数で配列の要素数を確定させる書き方 int var2[]{10, 9, 8, 7, 6, 5}; //初期化子の数と、宣言の要素数が違ったらどうなる? //int var4[10]{1,2,3}; //int var4[3]{1,2,3,4}; //<-------- コンパイル時に配列の大きさが確定しない例 --------> //int anum; //cin >> anum; //int var3[anum];//コンパイル時に配列の要素数が確定しないのはダメ //<-------- コンパイル時に配列の大きさが確定しない例 --------> //配列のすべての要素を表示 for(int i=0;i<10;i++)//int iはここで宣言してもいいんだよ { cout << "var[" << i << "] => " << var[i] << endl; } //要素数をオーバーしてアクセスすると変な値が出たり、何が起こるかわからない for(int i=0; i< 10; i++)//int iはここで宣言してもいいんだよ { cout << "var2[" << i << "] => " << var2[i] << endl; } } == 実行結果 == 範囲外アクセス部分では謎の値が表示されているのがわかる。\\ システムによっては、エラーをはいて落ちます。\\ var[0] => 10 var[1] => 9 var[2] => 8 var[3] => 7 var[4] => 6 var[5] => 5 var[6] => 4 var[7] => 3 var[8] => 2 var[9] => 1 var2[0] => 10 var2[1] => 9 var2[2] => 8 var2[3] => 7 var2[4] => 6 var2[5] => 5 var2[6] => 1534222710 <----範囲外アクセス部分 var2[7] => 1025531136 <----範囲外アクセス部分 var2[8] => 1979719742 <----範囲外アクセス部分 var2[9] => 1530032737 <----範囲外アクセス部分