次の方法で配列を初期化しようとしていますが、式の構文エラーが発生します。
int LineOne[ARRAY_LENGTH];//where ARRAY_LENGTH is a constant of length 10
if(SOME_CONDITION_IS_TRUE){
LineOne[ARRAY_LENGTH] = {0,1,0,0,1,1,1,0,1,1};
}
次の方法で配列を初期化しようとしていますが、式の構文エラーが発生します。
int LineOne[ARRAY_LENGTH];//where ARRAY_LENGTH is a constant of length 10
if(SOME_CONDITION_IS_TRUE){
LineOne[ARRAY_LENGTH] = {0,1,0,0,1,1,1,0,1,1};
}
変数が定義されているときの初期化子を除いて、「クラシック」C で配列リテラルを使用することはできません。
C99 では、複合リテラルを使用してこれを行うことができますが、リテラルの前にキャストのような式で型を繰り返す必要があります。
LineOne = (int[ARRAY_LENGTH]) { 0,1,0,0,1,1,1,0,1,1 };
それは、コードの残りの部分 (配列をどのように使用するか) に大きく依存し、どのソリューションが最適かということです。それを行う別の方法は...
int* LineOne = 0;
if(SOME_CONDITION_IS_TRUE) {
static int* init = {0,1,0,0,1,1,1,0,1,1};
LineOne = init;
}
そのようにすることはできません。別の配列を使用してコピーできます。
#include <string.h>
…
int values[] = {0,1,0,0,1,1,1,0,1,1};
int LineOne[ARRAY_LENGTH];//where ARRAY_LENGHT is a constant of length 10
if(SOME_CONDITION_IS_TRUE)
memcpy(LineOne, values, sizeof(values));