====== 配列の初期化の仕方 ======
==== 初期化子の書き方 ====
* 以下のようにして初期化する
* **型 変数名[要素数] = { 初期化子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 <----範囲外アクセス部分