You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言struct变量用{1,2}直接赋值失败但成员单独赋值正常是什么原因

问题根因
  • C语言中,用大括号包裹的{1, 2}属于聚合初始化语法,仅允许在变量声明阶段的初始化操作中使用,不能用于变量声明完成后的赋值操作。
  • 你的全局变量eh在进入main函数前已经完成了默认初始化(全局结构体默认全零初始化),在main中执行eh = {1, 2}属于赋值操作,不符合C语言语法规范,编译器会直接抛出语法错误,程序自然无法正常运行。

合法写法参考

错误复现代码:

struct point { int x; int y; };
struct point eh; // 全局变量已默认初始化
int main() {
    eh = {1, 2}; // 赋值场景误用初始化语法,非法
    printf("%d", eh.x);
    return 0;
}

合法写法1 单成员单独赋值(你第二段可运行的写法):

struct point { int x; int y; };
struct point eh;
int main() {
    eh.x = 1;
    eh.y = 2;
    printf("%d", eh.x);
    return 0;
}

合法写法2 C99及以上标准支持的复合字面量批量赋值:

struct point { int x; int y; };
struct point eh;
int main() {
    eh = (struct point){1, 2}; // 复合字面量语法,赋值场景合法
    printf("%d", eh.x);
    return 0;
}

内容的提问来源于stack exchange,提问作者Ricardi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:15:01