如何使用单行代码设置结构成员?
typedef struct {
int x;
int y;
}test;
test obj[2];
int main()
{
obj[0].x=0; //this works
obj[0].y=0; //this works
obj[0]={0,0}; //compilation error
}
答案 0 :(得分:3)
可以使用=
运算符分配结构,与C中的任何其他值完全相同:
obj[0] = existing_test;
obj[1] = function_returning_test();
以上依赖于结构值,这些结构值本身来自程序中的其他位置(可能已在多个语句中初始化,如问题中所示);要在单个表达式中创建结构值,请使用 object literal 语法:
obj[0] = (test){ .x = 15, .y = 17 };
obj[1] = (test){ .y = 19 };
此类文字中遗留的任何字段仍然存在,但为其类型设置为适当的零值,因此在上面的示例中obj[1].x
设置为零。
答案 1 :(得分:1)
创建实例时,您只能在单行代码中初始化结构数组中的所有值 < / strong>即可。 (不包括使用memset
)。请考虑以下示例:
#include <stdio.h>
typedef struct {
int x;
int y;
} test;
int main()
{
test obj[2] = { { 3, 5 }, { 4, 6 } };
int i = 0;
for (i = 0; i < 2; i++)
printf ("\n obj[%d].x = %d obj[%d].y = %d\n", i, obj[i].x, i, obj[i].y);
return 0;
}
<强>输出:强>
obj[0].x = 3 obj[0].y = 5
obj[1].x = 4 obj[1].y = 6
注意:正常初始化是0
,但是使用了不同的值来说明这一点。
答案 2 :(得分:0)
如果您要将值设置为零,则以下代码行应该有效:
memset(&obj,0,sizeof(obj));
但是,如果您希望将值初始化为零
,它才会起作用答案 3 :(得分:-2)
我认为您不能为结构变量分配结构值。想想obj[0]
是一些记忆的地址。
但是你可以在结构初始化数组中做到这一点:
test obj[2] = {{0, 0}, {1, 1}};