Functions that return a struct
- Function that returns both roots of a second degree polynomial equation:
/* Struct to store two values */
struct roots { float x1, x2; };
/* Function that receives the coefficients a, b and c and returns the roots of the second degree polynomial (it doesn't cover the case of a negative delta) */
struct roots x;
float delta;
delta = b*b - 4*a*c;
x.x1 = (-b + sqrt(delta))/(2*a);
x.x2 = (-b - sqrt(delta))/(2*a);
return x;
}
Functions can also be of struct type and return a struct, much like a function that returns an integer or a float. Inside the function "Quadratic" we have to declare a variable of the same struct type to store both roots.
The syntax of 'roots' includes curly brackets, but it's a struct, not a function. That's why it ends with a semi-colon.
Note: the function is not returning two variables, it's returning the values stored in the struct "x", which type's "roots".
- Calling the above function:
/* 1st way */
printf("%f, %f", Quadratic(1, 2, -3).x1, Quadratic(1, 2, -3).x2);
/* 2nd way */
struct roots x;
x = Quadratic(1, 2, -3);
printf("%f, %f", x.x1, x.x2);
Both should produce the same result: print the roots -3 and 1.