如何一次设置所有结构成员的值?

时间:2014-11-20 23:59:09

标签: c

如何使用单行代码设置结构成员?

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

}

4 个答案:

答案 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}};