C - Change all values of an array of structures in one line
-
11-07-2019 - |
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?
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.