问题
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?
回答1:
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.
回答2:
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));
回答3:
i think no, you can only init arrays by this way. but you can change values of structures using 'one-line' method
回答4:
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.
来源:https://stackoverflow.com/questions/1223736/c-change-all-values-of-an-array-of-structures-in-one-line