函数内如何返回结构体?
一个函数调用两个结构体做参数, 并在函数内定义一个新的结构体来存放两个结构体元素的处理结果(这3个结构体元素类型和个数一样),如果来返回这个新结构体?
比如:
double add_rational(struct rational a, struct rational b) // 传递两个结构
{
static struct rational m; // 定义一个新的结构,想返回这个结构
m.x = a.x + b.x;
m.y = a.y + b.y;
printf("add_rational(a, b) ={%lf, %lf}\n", m.x, m.y);
}
因为我不知道如何返回结构体,所以在函数内处理了打印结果的功能。但如果想在main中打印处理后的新结构元素,要怎么返回这个新结构体?
[解决办法]
返回结构体推荐的做法是,直接传入结构体指针,而不是去return结构体。
[解决办法]
直接用结构体作为函数参数或者返回值,效率太低了;
可以写成
void add_rational(struct rational *a, struct rational *b,struct rational *c) // 传递两个结构
{
//static struct rational m; 单独看这函数貌似没必要用static
c->x = a->x + b->x;
c->y = a->y + b->y;
//return m;
}
[解决办法]
struct rational add_rational(struct rational a, struct rational b)
{
struct rational m;
m.x = a.x + b.x;
m.y = a.y + b.y;
printf("add_rational(a, b) ={%lf, %lf}\n", m.x, m.y);
return m;
}
struct rational m = add_rational(a, b);
// 上述方法很直白,但当struct很大时可能效率有点问题。
void add_rational(struct rational a, struct rational b, struct rational * m)
{
m->x = a.x + b.x;
m->y = a.y + b.y;
printf("add_rational(a, b) ={%lf, %lf}\n", m->x, m->y);
}
struct rational m;
add_rational(a, b, &m);
// 不那么直白,但当struct很大时,效率会好。