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.