電子書籍の厳選無料作品が豊富!

配列を初めに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]);
}
}

A 回答 (4件)

コンパイラは何でしょう


C99対応のコンパイラなら配列の宣言に変数が使えますが同時に初期化は出来ないのでは(l_ABの値は実行時にならないと確定されない、実行時にl_ABが2とか3の可能性もあるので)
    • good
    • 0

今の場合大きさを指定する式 l_AB が定数ではないので, #3 の言われる通り初期化子を与えることはできません.

    • good
    • 0

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;
}
と書くしかありません。
    • good
    • 0

エラー表示が不適切なのでしょう。


初期化の有り無しに関わらず、配列サイズを変数で指定しての配列宣言はできません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!