c语言为什么结构体声明的时候可以直接赋值,后面的就不行

structstudent{inta;intb;}a={1,2},b;//正确_________________________structstudent{inta;in... struct student
{
int a;
int b;

}a={1,2},b;//正确
_________________________
struct student
{
int a;
int b;

}a,b;
a={1,2}; //错误

这样不行的话有没有什么简便的定义方法
展开
 我来答
风若远去何人留
推荐于2017-10-12 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450133
专业C/C++软件开发

向TA提问 私信TA
展开全部
声明的时候和后续赋值略有不同,在C语言中是两种处理方法。
如有结构体
struct test
{
int a;

char c;

int b;

};
定义的时候,可以

struct test var = {1,'c', 2};
这样初始化,结果为var.a = 1, var.c = 'c', var.b = 2;
但是如果后续赋值
var = {1,'c', 2};
就会报错。因为在C语言中不支持这种形式的操作。
不过可以取巧转换一下,改成
var = (struct test){1,'c', 2};
这样就可以了。 在这种情况下,系统会申请一个临时变量,并初始化为该值,再对var进行赋值。而同类型结构体之间赋值操作是C语言规则允许的。
jack28117
2011-04-24 · TA获得超过494个赞
知道答主
回答量:56
采纳率:0%
帮助的人:15.6万
展开全部
这个涉及到一个临时变量的问题,因为后面的a={1,2}; 不在结构体定义里面了,出了这个结构体系统就无法识别了,所以会提示错误。
追问
那要怎么办 一个一个定义太麻烦了吧吧
追答
这个语法就是这样定义的,暂时还没简便方法吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yql0105
推荐于2017-09-14 · TA获得超过730个赞
知道答主
回答量:150
采纳率:100%
帮助的人:220万
展开全部
你那个第一种做法叫初始化,C语言允许结构体初始化,但不允许第二种那样赋值
如果你写
struct student
{
int a;
int b;

};
struct student a={1,2};
也是对的,这就叫初始化
至于怎么样才能做到直接赋值,C语言里面并没有这样的操作
重载操作符也是C++里面的了
不过你可以这样struct student b={1,2};a=b;
C语言里面2个结构体之间是可以复制的
或者你也可以定义一个函数来做,函数体里面要用挨个赋值的方式
希望对你有帮助
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Sywzy
2011-04-24 · TA获得超过342个赞
知道小有建树答主
回答量:218
采纳率:0%
帮助的人:179万
展开全部
语法规定,这个好像没原因可说

要赋值的话,你可以这样 a.a=1;相信你也知道
追问
那有简便的定义方法吗
追答
语法规定吧,更简单的不知道
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wysaid
2011-04-25
知道答主
回答量:9
采纳率:0%
帮助的人:3.9万
展开全部
重载操作符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式