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}; //错误
这样不行的话有没有什么简便的定义方法 展开
{
int a;
int b;
}a={1,2},b;//正确
_________________________
struct student
{
int a;
int b;
}a,b;
a={1,2}; //错误
这样不行的话有没有什么简便的定义方法 展开
5个回答
展开全部
声明的时候和后续赋值略有不同,在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语言规则允许的。
如有结构体
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语言规则允许的。
展开全部
这个涉及到一个临时变量的问题,因为后面的a={1,2}; 不在结构体定义里面了,出了这个结构体系统就无法识别了,所以会提示错误。
追问
那要怎么办 一个一个定义太麻烦了吧吧
追答
这个语法就是这样定义的,暂时还没简便方法吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你那个第一种做法叫初始化,C语言允许结构体初始化,但不允许第二种那样赋值
如果你写
struct student
{
int a;
int b;
};
struct student a={1,2};
也是对的,这就叫初始化
至于怎么样才能做到直接赋值,C语言里面并没有这样的操作
重载操作符也是C++里面的了
不过你可以这样struct student b={1,2};a=b;
C语言里面2个结构体之间是可以复制的
或者你也可以定义一个函数来做,函数体里面要用挨个赋值的方式
希望对你有帮助
如果你写
struct student
{
int a;
int b;
};
struct student a={1,2};
也是对的,这就叫初始化
至于怎么样才能做到直接赋值,C语言里面并没有这样的操作
重载操作符也是C++里面的了
不过你可以这样struct student b={1,2};a=b;
C语言里面2个结构体之间是可以复制的
或者你也可以定义一个函数来做,函数体里面要用挨个赋值的方式
希望对你有帮助
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
语法规定,这个好像没原因可说
要赋值的话,你可以这样 a.a=1;相信你也知道
要赋值的话,你可以这样 a.a=1;相信你也知道
追问
那有简便的定义方法吗
追答
语法规定吧,更简单的不知道
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询