Funções que devolvem um struct

From Applied Science
  • Função que devolve ambas as raízes de uma equação polinomial de segundo grau:
/* Struct para guardar dois valores */
struct raizes {
    float x1, x2;
};

/* Função que recebe os coeficientes a, b e c e devolve as raízes do polinômio de segundo grau 
(não inclui o caso do delta ser negativo) */
struct raizes Bhaskara (int a, int b, int c) {
    struct raizes 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;
}

Funções também podem ter o tipo 'struct' e devolver um 'struct'. Assim como 'int' e 'float'. Dentro da função "Bhaskara" temos que declarar uma outra 'struct' para armazenar ambas as raízes.

A sintaxe de 'raizes' inclui chaves, mas é uma 'struct e não é uma função. É por isso que termina com ponto e vírula.

Nota: a função não está devolvendo duas variáveis. Está devolvendo os valores guardados na 'struct' "x", que é do tipo "raizes".


  • Chamando a função acima:
/* Primeiro modo */
printf("%f, %f", Bhaskara(1, 2, -3).x1, Bhaskara(1, 2, -3).x2);

/* Segundo modo*/
struct raizes x;
x = Bhaskara(1, 2, -3);
printf("%f, %f", x.x1, x.x2);

Ambos devem produzir o mesmo resultado: imprimir as raízes -3 e 1.