首页 > 解决方案 > 赋值与初始化:在 C 中初始化另一个结构内的结构

问题描述

我有一个结构,其中有两个字段本身就是结构。我想使用初始化列表来分配内部结构的字段,而不必手动分配每个字段。

struct point
{
    int x;
    int y;
};

struct rectangle
{
    struct point p1;
    struct point p2;
};

struct rectangle r2;
r2.p1 = {5, 6};
r2.p2 = {7, 20};

但是,此代码不会编译:

structs3.c:105:11: error: expected expression before ‘{’ token
   r2.p1 = {5, 6};
           ^
structs3.c:106:11: error: expected expression before ‘{’ token
   r2.p2 = {7, 20};
           ^

为什么这不起作用?是什么原因?

标签: cstruct

解决方案


你可以在定义时这样做r2,比如

struct rectangle r2 = {
    {5, 6},
    {7, 20}
};

或使用复合文字,如

r2.p1 = (struct point){5, 6};
r2.p2 = (struct point){7, 20};

推荐阅读