Este post discutirá como retornar vários valores de uma função em C.
Sabemos que a sintaxe das funções em C não nos permite retornar vários valores. Mas os programadores geralmente precisam retornar vários valores de uma função. Felizmente, existem várias soluções alternativas em C para retornar vários valores.
1. Ponteiros em C
Podemos usar ponteiros em C para retornar mais de um valor da função passando ponteiros como parâmetros de função e usá-los para definir vários valores, que terão visibilidade na função chamadora.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <stdio.h> // Função para retornar vários valores usando ponteiros void initialize(int *a, int *b, char *c) { *a = 10; *b = 20; *c = 'A'; } // Retorna vários valores de uma função em C int main(void) { int a, b; char c; initialize(&a, &b, &c); printf("a = %d, b = %d, c = %c", a, b, c); return 0; } |
Resultado:
a = 10, b = 20, c = A
2. Estruturas em C
Também podemos usar estruturas em C para retornar mais de um valor da função. Sabemos que uma estrutura é um tipo de dados definido pelo usuário em C que pode conter vários tipos de dados do mesmo tipo ou de tipos diferentes.
A ideia é criar um struct contendo todos os tipos de dados necessários como seus membros e retornar esse struct de nossa função. Em seguida, podemos recuperar os valores desejados da estrutura dentro de nossa função de chamada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <stdio.h> // envolve os vários valores em uma estrutura struct Tuple { int a, b; char c; }; // Função para retornar vários valores usando struct struct Tuple initialize() { struct Tuple tuple = { 10, 20, 'A' }; return tuple; } // Retorna vários valores de uma função em C int main(void) { int a, b; char c; struct Tuple tuple = initialize(); a = tuple.a; b = tuple.b; c = tuple.c; printf("a = %d, b = %d, c = %c", a, b, c); return 0; } |
Resultado:
a = 10, b = 20, c = A
3. Array
Vimos como retornar valores de diferentes tipos de dados da função usando ponteiros e struts. Agora, se todos os valores forem do mesmo tipo de dados, podemos encapsular os valores em um array e retornar esse array, conforme mostrado abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <stdio.h> #include <stdlib.h> // Função para retornar vários valores usando um array int* initialize() { // Importante: alocar memória dinamicamente int *temp = (int*) malloc(sizeof(int) * 3); *temp = 10; *(temp + 1) = 20; *(temp + 2) = 30; return temp; } // Retorna vários valores de uma função em C int main(void) { int a, b, c; int *arr = initialize(); a = arr[0]; b = arr[1]; c = arr[2]; printf("a = %d, b = %d, c = %d", a, b, c); // memoria livre return 0; } |
Resultado:
a = 10, b = 20, c = 30
Não devemos usar essa abordagem, pois as informações da variável não são passadas para a função do chamador. Por exemplo, estamos usando o índice do array para recuperar os valores de nossas variáveis. Além disso, observe que temos que alocar o array dinamicamente em um heap. Se usarmos o array estático, ele deixará de existir quando sairmos da função, e acessá-lo dentro da função chamadora resultará em um comportamento indefinido.
Isso é tudo sobre como retornar vários valores de uma implementação de função em C.
Veja também: