如何获得修改任何参数的function?

我的目标:

我必须创建一个加起来两个分数的函数。

我已经定义了一个名为fraction的新struct (typedef)。

该函数不能有返回类型fraction ,它必须是void ,因此它必须修改输入的一个参数,我该如何实现呢? 指针可能吗? 你会如何修改我的代码来实现它?

这是我的代码:

 typedef struct{ char sign; int num; int den; } fraction; void sum(fraction, fraction, fraction); int main(void) { fraction op1, op2, solution; sum(op1, op2, solution); return 0; } void sum(fraction f1, fraction f2, fraction sol){ if (f1.sign == '-') { f1.num = f1.num * -1; } if (f2.sign == '-') { f2.num = f2.num * -1; } sol.num = f1.num*f1.den + f2.num*f1.den; sol.den = f1.den * f2.den; sol.sign = '+'; if (sol.num < 0) { sol.sign = '-'; sol.num = sol.num * -1; } } 

这通常有点宽泛,但为了向您展示指针 ,让我补充一点,是的,您正走在正确的道路上。

指针可能吗?

是。 详细说明原因部分:

C使用pass-by-value进行函数参数传递,因此,您无法从被调用函数内部修改参数,并期望该值在调用者中保留/反映 。 但是,如果我们将指针作为参数传递,则指针本身不能如上所述从被调用函数中修改,但是对指向指针的内存位置所做的任何更改都将反映在调用者中(只要指针即可)本身是有效的。

现在,来看看如何

您需要传递第三个参数(或者,应该存储结果的任何一个)作为指向结构变量的指针。 这样,对被调用函数内部地址所指向的内存位置的修改将反映在调用者中。

所以,你的function签名看起来像

  void sum(fraction f1, fraction f2, fraction * sol) 

函数调用看起来像

  sum(op1, op2, &solution); 

现在,在调用函数内部访问sol ,我留给你。