gpt4 book ai didi

c - 如何获得修改任何参数的函数?

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:01 25 4
gpt4 key购买 nike

我的目标:

我必须创建一个将两个分数相加的函数。

我定义了一个名为 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;
}
}

最佳答案

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

Pointers maybe?

是的。详细说明为什么部分:

C 在函数参数传递中使用按值传递,因此,您不能从被调用函数内部修改参数并期望该值在调用者中保留/反射(reflect)。然而,如果我们传递一个指针作为参数,指针本身不能从被调用的函数中修改,如上所述,但是对指向指针的内存位置所做的任何更改,将反射(reflect)在调用者(只要指针本身有效)。

现在,进入如何部分:

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

所以,你的函数签名看起来像

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

函数调用看起来像

 sum(op1, op2, &solution);

现在,我将访问被调用函数中的 sol 留给你。

关于c - 如何获得修改任何参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47776384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com