- ベストアンサー
配列の初期化に関する質問です
配列を初めにAB[10]={0,1,・・・・,0}のように宣言すればちゃんと動くのですが, int l_AB=10; としてからAB[l_AB]={0,1,・・・・,0}とすると「配列初期化子内の要素が多すぎます」となりコンパイルできません。自分には何が違うのかよくわかりません。出来ないのが普通なのでしょうか? #include<stdio.h> #include<stdlib.h> int main() { int l_AB = 10; int AB[l_AB]={0,1,1,1,1,0,1,1,1,0}; int i=0; for(i=0;i<l_AB;i++){ printf("%d",AB[i]); } }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
コンパイラは何でしょう C99対応のコンパイラなら配列の宣言に変数が使えますが同時に初期化は出来ないのでは(l_ABの値は実行時にならないと確定されない、実行時にl_ABが2とか3の可能性もあるので)
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
今の場合大きさを指定する式 l_AB が定数ではないので, #3 の言われる通り初期化子を与えることはできません.
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
int l_AB = 10; を const int l_AB = 10; にすれば、コンパイル出来ます。 要素数にconstでない変数を用いての配列宣言は出来ないので、値が変化するconstでない変数を要素数にする場合は、 #include<stdio.h> #include<stdlib.h> #include<mem.h> int main() { int l_AB = 10; int *AB = new int[l_AB]; int i; int dmy[]={0,1,1,1,1,0,1,1,1,0}; memcpy(AB,dmy,sizeof(dmy)); for(i=0;i<l_AB;i++){ printf("%d",AB[i]); } delete AB; } と書くしかありません。
- rinkun
- ベストアンサー率44% (706/1571)
エラー表示が不適切なのでしょう。 初期化の有り無しに関わらず、配列サイズを変数で指定しての配列宣言はできません。