我的目标:
我必须创建一个将两个分数相加的函数。
我定义了一个新的struct
(typedef) 称为fraction
.
该函数不能有返回类型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;
}
}
这通常有点宽泛,但为了向您展示pointers,让我补充一下,是的,你走在正确的道路上。
也许是指点?
是的。详细说明why part :
C 使用按值传递来传递函数参数,因此,您不能从被调用函数内部修改参数并期望该值是保留/反映在呼叫者中。然而,如果我们传递一个指针作为参数,则指针本身不能像上面所说的那样从被调用的函数中修改,但是对指向指针的内存位置所做的任何更改都将被修改。反映在调用者中(只要指针本身有效)。
现在,来到how part:
您需要将第三个参数(或者,无论哪个应该存储结果)作为指向结构变量的指针传递。这样,被调用函数内部对地址所指向的内存位置的修改将反映在调用者中。
所以,你的函数签名看起来像
void sum(fraction f1, fraction f2, fraction * sol)
函数调用看起来像
sum(op1, op2, &solution);
现在,可以访问sol
在被调用的函数中,我留给你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)