我正在解决C中的问题,但是我很难连接部分脚本。
我按如下方式定义了一个类型对:
typedef struct pair {
double x, y;
} pair;
现在,我想将函数中的值作为对返回,但我不明白该怎么做。
pair predcorr(double t, double x, double y, double h) {
double Newx = x + 1.0/2.0 * h * (dxdt(t, x, y) + dxdt(t+h, x+(h*dxdt(t, x, y)), y+(h*dxdt(t, x, y))));
double Newy = y + 1.0/2.0 * h * (dydt(t, x, y) + dydt(t+h, x+(h*dydt(t, x, y)), y+(h*dydt(t, x, y))));
return ????,
如何起作用,是否有可能向我提供一些解释?
答案 0 :(得分:3)
该函数的返回类型为pair
。因此,您必须返回pair
类型的内容 - 这应该已经提示您应该做什么。您必须创建此类型的变量,用值(Newx和Newy)填充它并返回它。它的工作方式与想要返回整数的方式相同:创建,填充,返回它。
答案 1 :(得分:0)
pair result;
result.x = ...;
result.y = ...;
return result;
答案 2 :(得分:0)
在C
中,return只能返回一个变量。要返回多个值[变量],您需要
使用第二种方法,你可以使用像..
这样的东西在来电者中:
typedef struct pair {
double a, b;
} pair;
pair pr;
pr = predcorr(m, n, o, p);
功能
pair predcorr(double t, double x, double y, double h)
{
pair result;
result.a = x + 1.0/2.0 * h * (dxdt(t, x, y) + dxdt(t+h, x+(h*dxdt(t, x, y)), y+(h*dxdt(t, x, y))));
result.b = y + 1.0/2.0 * h * (dydt(t, x, y) + dydt(t+h, x+(h*dydt(t, x, y)), y+(h*dydt(t, x, y))));
return result;
}
请注意为该函数指定的return
类型。因此,您显然应该返回pair
类型的变量。功能
答案 3 :(得分:0)
解释传递和返回结构值的最简单方法是使用示例。将complex data structures
传递给functions
时,struc
t通常为passed and returned
a pointer
。这还要求您的函数原型返回与您想要返回的类型一致。 (这也可以被声明为void
函数,因为在执行函数本身期间填充了pair
的值。)
注意:将对作为指针传递,结构address
传递给predcorr
。因此,如果您声明pair
的静态实例,则需要在其前面加上运算符的&
地址。
以下是一个简短的示例,其中包含了一些功能,可以向您展示如何使用代码:
#include <stdio.h>
typedef struct pair {
double x, y;
} pair;
double dxdt (double a, double b, double c) /* totally made up functions */
{ return a*a + 2 * a * b + c * c; }
double dydt (double a, double b, double c)
{ return 2*a*a - 4 * a * b - 2 * c * c; }
/* function accepts and returns a pointer to struct pair */
pair *predcorr (pair *ptr, double t, double x, double y, double h) {
double Newx = x + 1.0/2.0 * h * (dxdt(t, x, y) + dxdt(t+h, x+(h*dxdt(t, x, y)), y+(h*dxdt(t, x, y))));
double Newy = y + 1.0/2.0 * h * (dydt(t, x, y) + dydt(t+h, x+(h*dydt(t, x, y)), y+(h*dydt(t, x, y))));
ptr-> x = Newx;
ptr-> y = Newy;
return ptr;
}
int main () {
double t = 5; /* made up initial example values */
double x = 2;
double y = 7;
double h = 3;
pair mypair = {0,0}; /* declare instance of struct pair */
predcorr (&mypair, t, x, y, h); /* call predcorr pass ptr */
/* print the values as returned in mypair */
printf ("\nThe Newx/Newy values are:\n\n");
printf (" Newx : %lf\n Newy : %lf\n\n", mypair.x, mypair.y);
return 0;
}
(已组成)值的输出:
$./bin/dxyt
The Newx/Newy values are:
Newx : 132336.500000
Newy : -185504.000000
您的另一个选择是每次调用dynamically allocate
时struct pair
的{{1}}新存储空间。您不必传递指向该函数的指针,只需predcorr
函数调用返回assign
函数中struct pair
的指针即可。唯一的附加要求是您现在负责释放与返回相关的数据,以防止代码中的内存泄漏。这并不难,但只需要多一点努力就可以在这种状态下迷惑。仔细看看,如果您有任何问题,请告诉我。