Can one (re)set all the values of an array in one

2020-07-02 22:34发布

In C, I know I can make an array like this

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

However, imagine the array was already initialised like

int myarray[5];

and then at some point afterwards, I wanted to set/change all the values without going

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

but rather, something more like

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

The reason why I ask this is because if I declare my array on the heap, I will initialise the array like:

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

Then I would like to be able to enter in all the values in one line (mostly to make my code look cleaner)

4条回答
来,给爷笑一个
2楼-- · 2020-07-02 22:48
#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;
}
查看更多
ら.Afraid
3楼-- · 2020-07-02 22:57

Here is a solution that is all standards compatible (C89, C99, C++)

It has the advantage that you only worry about entering the data in one place. None of the other code needs to change - there are no magic numbers. Array is declared on the heap. The data table is declared const.

(Click here to try running it in 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;
}
查看更多
狗以群分
4楼-- · 2020-07-02 23:00
memcpy(myarray, (int [5]){a,b,c,d,e}, 5*sizeof(int));
查看更多
时光不老,我们不散
5楼-- · 2020-07-02 23:01

No, C doesn't have such feature. If you are setting all array elements to the same value use memset(3).

查看更多
登录 后发表回答