C语言中,用结构体作函数参数的问题?

假如我定义了一个结构体和一个函数,如下:
typedef struct {
char r;
char g;
char b;
} RGBColor

void test (RGBColor color) {
...
}

在引用test函数时,可以这样:
RGBColor color = {0x0,0x1,0x2} ;
test(color);

但我想直接给RGBColor的值,例如:
test({0x0, 0x1, 0x2})
但这样keilc会报错!

请问有什么办法可以不需要重新定义一个RGBColor的变量,而直接在函数引用时赋值吗?

可以的,这样写:
test((RGBColor){0x0, 0x1, 0x2});
这个意思是把{0x0, 0x1, 0x2}强制转化为RGBColor类型。从语法语义上面是没问题的,在GCC编译没问题。
但是51上面没实验,按C标准能说得通,你可以试一试。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-30
当然可以了,首先定义一个RGBColor结构体
typedef struct {
char r;
char g;
char b;
} RGBColor;
然后定义一个结构体变量
RGBColor color;
然后定义一个函数给color中的三个变量都赋值如:
void test(int a,int b,int c)
{
color.r=a;
color.g=b;
color.b=c;
}
第2个回答  2010-07-30
貌似不是很好搞,如果是C++里面还可以用new,但是如果没有变量名的话也不好delete。所有还是老老实实用前面的方法。我觉得就多一句话没什么大不了的,性能也不见得就一定优化了多少。
如果代码非要写的只有自己看的懂,而别人都很难看懂的话。其实不是表示你多牛X,而说明你的代码维护起来非常复杂。
不要非要学习孔乙己回字有多少种写法,如果你能掌握一种,ok,够了。你能够完成相应的功能,别人一看就懂了。这就行了。
第3个回答  2010-07-30
typedef struct RGBColor{
RGBColor( char _r,char _g, char _b ): r(_r),g(_g),b(-b){}
char r;
char g;
char b;
} RGBColor;

void test (RGBColor color) {
}

//////////////////调用///////////////////
test(RGBColor('a','b','c'));

不知道这样满足你的要求不?
第4个回答  2010-08-02
可以设置r,g,b为全局变量,对全局变量赋值后 ,如果想要改变值,可以在函数内部再赋值
相似回答