提问人:Ricardi 提问时间:12/7/2021 最后编辑:Vlad from MoscowRicardi 更新时间:12/7/2021 访问量:314
structs 直接声明 C
structs direct declaration in C
问:
这段代码有什么问题?我不明白为什么这不起作用。
struct point {
int x;
int y;
} eh;
void main() {
eh = {1, 2};
printf("%i", eh.x);
}
但这工作正常
struct point {
int x;
int y;
} eh;
void main() {
eh.x = 2;
printf("%i", eh.x);
}
答:
7赞
David Grayson
12/7/2021
#1
这种语法可能适用于其他一些语言,但在 C 语言中,您应该编写:
eh = (struct point){1, 2};
右侧的表达式称为复合字面量。
4赞
Vlad from Moscow
12/7/2021
#2
在 C 中,赋值运算符需要一个表达式,但在此表达式语句中
eh = {1, 2};
带支撑的列表不是一个表达式。
支撑列表可用于对象的初始化。例如,你可以写
struct point {
int x;
int y;
} eh = { 1, 2 };
或
struct point {
int x;
int y;
} eh = { .x = 1, .y = 2 };
或者,您可以在 main 中使用复合文本(如
eh = ( struct point ){ 1, 2 };
或
eh = ( struct point ){ .x = 1, .y = 2 };
复合文本创建一个未命名的对象,该对象的类型与分配给该对象的类型相同。一个结构类型的一个对象可以分配给同一结构类型的另一个对象。struct point
eh
您还可以使用复合文本初始化对象 eh
struct point {
int x;
int y;
} eh = ( struct point ){ .x = 1, .y = 2 };
注意,根据 C 标准,没有参数的函数 main 应声明如下
int main( void )
0赞
Cheatah
12/7/2021
#3
这也将起作用:
#include <stdio.h>
struct point {
int x;
int y;
};
int main(void) {
struct point eh = {1, 2};
printf("%i", eh.x);
}
请注意,我删除了一些东西,添加了包含并修复了函数类型和参数。stdio.h
main
评论
printf
void main()
应该是int main(void)