【发布时间】:2013-05-12 22:00:37
【问题描述】:
在C语言中,如果一个结构变量的类型相同,我们可以将它们的值分配给另一个。根据这一点,在我的以下程序中,当两者都是struct变量时,我可以使用s1=s2相同类型的。但是为什么在那之后我不允许使用s1={59,3.14}?
我知道除了在初始化语句中之外,我们不能将字符串 "Test" 分配给字符数组 arr,因为对于字符串 "Test",它在分配期间分解为类型 char*,因此存在类型不匹配错误。但是在我的程序中,{59,3.14} 不会分解为任何指针,是吗?为什么即使它是同一类型,也不允许将其分配给 s1,尤其是因为它在初始化?s2 和{59,3.14} 之间有什么区别,允许将一个分配给s1,而另一个则不允许?
#include<stdio.h>
int main(void)
{
struct test1
{
int a;
float b;
} s1= {25,3.5},s2= {38,9.25};
printf("%d,%f\n",s1.a,s1.b);
s1=s2; // Successful
printf("%d,%f\n",s1.a,s1.b);
s1= {59,3.14}; //ERROR:expected expression before '{' token|
printf("%d,%f\n",s1.a,s1.b);
}
【问题讨论】:
-
最简单的答案(我并不是轻率):因为这就是语法的定义方式。 C99 引入了复合字面量,不知道现在能不能照你说的做。
-
虽然 yoones 的回答告诉我如何让它在我的代码中工作,但我仍然觉得需要一些解释,一些技术解释关于这里发生了什么。非常欢迎详细回答。
标签: c struct variable-assignment structure