假设您有一个如下所示的结构:
struct Point {
int x, y;
};
现在,如果我想要一个Point类型的struct变量,我可以这样做:
struct Point p1 = {5, 5};
这很好用。但是,我已经看到你也可以像这样创建结构变量:
struct Point {
int x, y;
} p2;
如果我现在尝试为我的struct变量p2
赋值,如下所示:
p2 = {6, 6};
我收到错误。为什么会这样?
答案 0 :(得分:0)
它仅适用于初始化:
Point p1 = {5, 5}; // Ok
虽然不适用于声明+作业:
Point p2;
p2 = {5, 5}; // Error
答案 1 :(得分:0)
struct Point {
int x, y;
} p2 = {5,5};
另外,我认为链接页面很有趣:
struct s{
int a;
struct ss{
int c;
char d;
}e;
}x[] = {
{1, {2, 'a'}},
{3, {4, 'b'}}
};
答案 2 :(得分:0)
定义和分配需要不同的语法。它们对于简单类型(int x = 5;
和x = 5;
)是相同的,但它们对于复合类型是不同的。
在C 1999及更高版本中,您可以使用“复合文字”(实际上不是文字)为复合类型指定值:
p2 = (struct Point) { 5, 5 };
答案 3 :(得分:0)
struct Point p1 = {5, 5};
创建一个变量p1
,分配给方括号中的给定值。其中p2 = {6, 6};
看起来类似于上述情况,但它只是LHS的赋值表达式,没有任何意义。
然而,在C99
,p2 = (struct Point) {6, 6};
中,这使得RHS成为有效的表达式赋值。