首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么结构不能直接赋值?

为什么结构不能直接赋值?
EN

Stack Overflow用户
提问于 2012-08-30 11:34:17
回答 2查看 8.8K关注 0票数 28

假设我有一个带有标记MyStruct的完全定义的结构,并且x, y, ..., z是其字段的允许值。为什么是

代码语言:javascript
复制
struct MyStruct q = {x,y,..,z};

允许,但是

代码语言:javascript
复制
struct MyStruct q;
q = {x,y,...,z};

是不允许的吗?我觉得这很烦人。在第二种情况下,我之前声明了q,我需要为每个字段逐个赋值:

代码语言:javascript
复制
q.X = x; q.Y = y; ... q.Z = z;

其中,X, Y, ..., ZMyStruct的字段。这背后有什么原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-30 12:06:29

您要查找的是一个复合文字。这是在C99中添加到语言中的。

你的第一个案例:

代码语言:javascript
复制
struct MyStruct q = {x,y,..,z};

是特定于初始化的语法。第二种情况,在语言的技巧中,不是初始化,而是赋值。赋值的右侧必须是正确类型的结构。在C99之前,语言中没有用来编写结构文字的语法,而这正是您正在尝试做的。{x,y,..,z}看起来像一个内部有表达式的块。如果有人试图将其视为字面值,但语言并非如此,那么就无法确定它的类型。(在您的上下文中,您可以做出一个很好的猜测。)

为了实现这一点并解决类型问题,C99添加了语法,以便您可以这样写:

代码语言:javascript
复制
q = (struct MyStruct){x,y,...,z};
票数 43
EN

Stack Overflow用户

发布于 2012-08-30 11:46:50

您可以这样做,但您需要在聚合之前提供结构的类型:

代码语言:javascript
复制
struct MyStruct q;
q = (struct MyStruct){x,y,...,z};
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12189480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档