Ir para o conteúdo
miguel__1

[Resolvido] Retornar 2 valores

Mensagens Recomendadas

HappyHippyHippo

em vez de complicar, como foi referido, podes simplesmente dar à função o local onde guardar os vários valores que pretendes que a função calcule/retorne

void my_div(int a, int b, int * quociente, int * resto) {
 *quociente = a / b;
 *resto = a % b;
}

int op1 = 3, op2 = 2, q, r;
my_div(op1, op2, &q, &r);
printf("a divisao de %d por %d resulta em %d com o resto de %d\n", op1, op2, q, r);

  • Voto 2

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

passas os valores para um array e retornas o array

Como? Assim:

int* func(void){
  int array[MAX];
  ...
  return array;
}

:P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Wladimir

Boas,

As respostas já apresentadas cobrem duas técnicas para resolver o problema. O HappyHippyHippo aposta na simplicidade (passagem de parâmetros/valores por referência) e PsySc0rpi0n na flexibilidade.

Preocupa-me a implementação da solução feita pelo PsySc0rpi0n, pois apresenta um problema de segurança e integridade (corrosão de memória). Aloca e retorna um endereço da pilha. Pois, esse mesmo endereço poderá ser modificado por subsequentes chamadas a funções. "Nunca retornar endereços da pilha", dizia o prof.

Cometi esse erro muitas vezes. Já passei muitas horas a fazer debugging e a ver que depois de chamar uma função, algumas variáveis mudavam de valor, sem que tivessem sido referenciadas ou passadas a essas funções.

Editado por Wladimir
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

Boas,

As respostas já apresentadas cobrem duas técnicas para resolver o problema. O HappyHippyHippo aposta na simplicidade (passagem de parâmetros/valores por referência) e PsySc0rpi0n na flexibilidade.

Preocupa-me a implementação da solução feita pelo PsySc0rpi0n, pois apresenta um problema de segurança e integridade (corrosão de memória). Aloca e retorna um endereço da pilha. Pois, esse mesmo endereço poderá ser modificado por subsequentes chamadas a funções. "Nunca retornar endereços da pilha", dizia o prof.

Cometi esse erro muitas vezes. Já passei muitas horas a fazer debugging e a ver que depois de chamar uma função, algumas variáveis mudavam de valor, sem que tivessem sido referenciadas ou passadas a essas funções.

Apesar de eu não ter conhecimentos suficientes para entender ao certo o que acabaste de explicar, o que eu apresentei não era suposto ser uma solução... Foi apenas uma espécie de sarcasmo/ironia!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Apesar de eu não ter conhecimentos suficientes para entender ao certo o que acabaste de explicar (...)

Um dia irás perceber :) Com calma e paciência chegarás lá; na realidade, o que o Wladimir falou foi algo muito simples, um dia se quiseres discutimos isso no IRC (é mais simples que explicar aqui).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.