我对C中的结构有一个简单的问题。
我有这个结构和这个功能:
struct Vec2
{
int x;
int y;
}
void draw(Sprite* sprite, struct Vec2 pos);
无论如何在c ++中使用等效语言吗?
draw(foo, new Vec2(10, 20));
我试过了,但编译器不同意我的说法:
draw(foo, {10, 20} );
有人帮忙吗?
编辑:我在C ++模式下使用Visual C ++ 2008 Express,但对于我的学校,我必须使用C语言编写,而不是C ++
答案 0 :(得分:5)
如果您的编译器支持C99或更高版本,您可以使用复合文字:
draw(foo, (struct Vec2){10, 20});
或者,如果您想更明确地了解成员名称:
draw(foo, (struct Vec2){.x = 10, .y = 20});
(请注意,Microsoft的C编译器不支持C99,这可能会限制代码的可移植性。)
答案 1 :(得分:2)
我通常做的是:
struct Vec2 make_Vec2( int x, int y ) {
struct Vec2 vec;
vec.x = x; vec.y = y;
return vec;
}
...
draw( foo, make_Vec2( 10, 20 ) );
答案 2 :(得分:1)
只需添加@Keith Thompson答案的工作示例:
#include <stdio.h>
#include<string.h>
struct two{
int x;
int y;
};
draw(struct two t){
printf("\nx=%d y=%d\n", t.x, t.y);
}
int main(){
draw((struct two){1,2});
draw((struct two){.y = 1, .x = 2});
}
输出:
:~$ ./a.out
x=1 y=2
x=2 y=1