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);
}
这种语法可能适用于其他一些语言,但在 C 中你应该这样写:
eh = (struct point){1, 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 )
这也行得通:
#include <stdio.h>
struct point {
int x;
int y;
};
int main(void) {
struct point eh = {1, 2};
printf("%i", eh.x);
}
请注意,我删除了一些东西,添加了 stdio.h
包含并修复了 main
函数类型和参数。
这段代码有什么问题?我不明白为什么这不起作用。
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);
}
这种语法可能适用于其他一些语言,但在 C 中你应该这样写:
eh = (struct point){1, 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 )
这也行得通:
#include <stdio.h>
struct point {
int x;
int y;
};
int main(void) {
struct point eh = {1, 2};
printf("%i", eh.x);
}
请注意,我删除了一些东西,添加了 stdio.h
包含并修复了 main
函数类型和参数。