Можно ли (пере) установить все значения массива в одну строку (после того, как он был инициализирован)? - PullRequest
13 голосов
/ 28 ноября 2010

В 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));

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

Ответы [ 4 ]

11 голосов
/ 28 ноября 2010
memcpy(myarray, (int [5]){a,b,c,d,e}, 5*sizeof(int));
4 голосов
/ 28 ноября 2010

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

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

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

#include<stdio.h>
#include<stdlib.h>

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;
}
1 голос
/ 28 ноября 2010

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

0 голосов
/ 29 июля 2016
#include<stdio.h>
#include<stdlib.h>

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...