Можно ли (re) установить все значения массива в одной строке (после того, как она была инициализирована)?

В C я знаю, что могу создать такой массив

int myarray[5] = {a,b,c,d,e}; 

Однако представьте, что массив уже инициализирован как

 int myarray[5]; 

и затем в какой-то момент после этого я хотел установить / изменить все значения без необходимости

 myarray[0] = a; myarray[1] = b; myarray[2] = c; myarray[3] = d; myarray[4] = e; 

а скорее нечто большее

 myarray = {a,b,c,d,e}; 

Причина, по которой я спрашиваю об этом, состоит в том, что если я объявлю свой массив в куче, я инициализирую массив следующим образом:

 int* myarray = malloc(5*sizeof(int)); 

Затем я хотел бы иметь возможность вводить все значения в одной строке (в основном, чтобы мой код выглядел чище)

 memcpy(myarray, (int [5]){a,b,c,d,e}, 5*sizeof(int)); 

Вот решение, совместимое со всеми стандартами (C89, C99, C ++)

Преимущество состоит в том, что вы беспокоитесь только о вводе данных в одном месте. Ни один другой код не нуждается в изменении – нет волшебных чисел. Массив объявляется в куче. Таблица данных объявлена ​​как const.

(Нажмите здесь, чтобы попробовать запустить его в Codepad)

 #include #include int main() { unsigned int i = 0; int *myarray = 0; static const int MYDATA[] = {11, 22, 33, 44, 55}; myarray = (int*)malloc(sizeof(MYDATA)); memcpy(myarray, MYDATA, sizeof(MYDATA)); for(i = 0; i < sizeof(MYDATA)/sizeof(*MYDATA); ++i) { printf("%i\n", myarray[i]); } free(myarray); return 0; } 

Нет, C не имеет такой функции. Если вы устанавливаете все элементы массива на одно значение, используйте memset(3) .

 #include #include int *setarray(int *ar,char *str) { int offset,n,i=0; while (sscanf(str, " %d%n", &n, &offset)==1) { ar[i]=n; str+=offset; i+=1; } return ar; } int main() { int *sz=malloc(5*sizeof(int)),i; //call setarray(sz,"10 30"); //output for(i=0;i<2;i++) printf("%d\n",sz[i]); return 0; }