首页 > 解决方案 > 为什么这个结构赋值在 C 中不起作用?

问题描述

#include <stdio.h>
#include <stdlib.h>


int main()
{
    struct point
    {
        int x, y;
    };

    struct rectangle
    {
           struct point upper_left, lower_right;
    };

    struct rectangle *p = malloc(sizeof(struct rectangle));

    p->upper_left = {10,25};

    return 0;
}

这给出了:

error: expected expression before ‘{’ token
   19 |     p->upper_left = {10,25};

标签: cpointersstruct

解决方案


语法{ ... }是一个初始化列表,并且可能只作为初始化的一部分出现,而不是赋值。

但是,您可以做的是使用复合文字(包括初始化程序)动态创建结构对象并将其用于分配。

 p->upper_left = (struct point){10,25};

推荐阅读