如何获得修改任何参数的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
,我留给你。