3

我有一个关于 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++

4

3 回答 3

5

如果您的编译器支持 C99 或更高版本,则可以使用复合文字

draw(foo, (struct Vec2){10, 20});

或者,如果您想更明确地了解成员名称:

draw(foo, (struct Vec2){.x = 10, .y = 20});

(请注意,Microsoft 的 C 编译器不支持 C99,这可能会限制代码的可移植性。)

于 2013-03-19T18:43:45.703 回答
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 ) );
于 2013-03-19T18:46:26.700 回答
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
于 2013-03-19T18:50:42.660 回答