Q: How can I return multiple values from a function?
A: There are several ways of doing this. (These examples show hypothetical polar-to-rectangular coordinate conversion functions, which must return both an x and a y coordinate.)
#include <math.h>
polar_to_rectangular(double rho, double theta,
		double *xp, double *yp)
{
	*xp = rho * cos(theta);
	*yp = rho * sin(theta);
}
...
	double x, y;
	polar_to_rectangular(1., 3.14, &x, &y);
struct xycoord { double x, y; };
struct xycoord
polar_to_rectangular(double rho, double theta)
{
	struct xycoord ret;
	ret.x = rho * cos(theta);
	ret.y = rho * sin(theta);
	return ret;
}
...
	struct xycoord c = polar_to_rectangular(1., 3.14);
polar_to_rectangular(double rho, double theta,
		struct xycoord *cp)
{
	cp->x = rho * cos(theta);
	cp->y = rho * sin(theta);
}
...
	struct xycoord c;
	polar_to_rectangular(1., 3.14, &c);
(Another example of this technique is the Unix system call stat.)
See also questions 2.7, 4.8, and 7.5a.