Question

I can declare a structure:

typedef struct
{
  int var1;
  int var2;
  int var3;
} test_t;

Then create an array of those structs structure with default values:

test_t theTest[2] =
{
   {1,2,3},
   {4,5,6}
};

But after I've created the array, is there any way to change the values in the same way I did above, using only one line, specifying every value explicitly without a loop?

Was it helpful?

Solution

In C99 you can assign each structure in a single line. I don't think that you can assign the array of structs in one line though.

C99 introduces compound literals. See the Dr. Dobbs article here: The New C: Compound Literals

theTest[0] = (test_t){7,8,9};
theTest[1] = (test_t){10,11,12};

You could assign to a pointer like this:

test_t* p; 
p = (test_t [2]){ {7,8,9}, {10,11,12} };

You could use memcpy as well:

memcpy(theTest, (test_t [2]){ {7,8,9}, {10,11,12} }, sizeof(test_t [2]);

Above tested with gcc -std=c99 (version 4.2.4) on linux.

You should read the Dr. Dobbs article to understand how compound literals work.

OTHER TIPS

In case you want to set the values to zero (or -1), you can use memset:

memset(struct_array, 0, sizeof(struct_array));
memset(struct_array, -1, sizeof(struct_array));

i think no, you can only init arrays by this way. but you can change values of structures using 'one-line' method

If the variables are being copied from another source, you can use a method like memcpy to directly overwrite the struct values.

However, the language doesn't provide a direct way to just set the values, other than setting individual elements.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top