• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rickfelix

Ajuda com return.

14 mensagens neste tópico

Olá de novo :-)

Estou aqui com uma duvida, que não estou a conseguir esclarecer através de pesquisa no google, então venho perguntar-vos a vocês, eheh  ;)

Eu queria que numa função, a mesma retornasse vários valores, por exemplo:

(...)

int retorna(int x, int y, int z, int a){
x = x+y;
z = z+a;

return a z;
}

Isto é possivel de fazer? ou se não for alguém tem alguma sugestão de como o será possivel fazer?

Obrigado!

rick

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, ou bem q retornas a ou z nesse caso, os dois não.

Se queres retornar 2 inteiros, dou-te 2 sugestões:

1) Retornar um array de 2 posições com 2 inteiros.

2) Criares um struct com 2 campos, inteiros no caso, e retornares essa struct.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Passas como parâmetro da função o endereço das variáveis que vão guardar os valores que queres devolver, e depois na função trabalhas com apontadores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Passas como parâmetro da função o endereço das variáveis que vão guardar os valores que queres devolver, e depois na função trabalhas com apontadores.

Com esta solução tens q ter em atenção q alteras o valor da variavel q passas como parametro, visto estares a passar o apontador.

Se for essa a intenção, então é o q deves fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

era mesmo isso, alterar o valor da variável, portanto se trabalhar apenas passando os endereços e alterando os valores dos mesmos, ainda que seja de ficheiros diferentes, ele assume sempre o valor que lhe atribuir, certo?

Obrigado pela ajuda ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um exemplo poderia ser assim?

extern mudavalor(int *arg1){
        *arg1 = 10;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

"extern" não é um tipo de retorno. Nesse caso deves pôr "void".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas eu estou a fazer uma biblioteca com funções, axo que só com extern é que a função aceita ser chamada, certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim eu faço include da biblioteca, mas ainda assim na declaração da função na biblioteca não é necessário colocar o extern? :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não. Extern usas quando estás a referenciar uma variável global de outro ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Devolver estruturas de dados é uma das coisas que em C é feito 'manualmente' ao contrario de liguagens orientadas a objectos.

Pessoalmente não gosto de ver funções que são usadas para devolver valores sem uma instrução return. Acho deselegante na medida em que é muito menos óbvio mais tarde quando nós, ou alguem, lê o código.

Em C só é possível devolver tipos de dados básicos, pelo que quando é necessario devolver outro tipo de dados usa-se um ponteiro para um ponto bem identificado da estrutura em questão. Tipicamente é por exemplo o inicio de uma string, a raíz de uma árvore, o nó sentinela de uma lista, etc.

PS: alguem que esteja habituado a programar em C podia escrever uma página sobre isto no nosso wiki. É uma pergunta frequente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pedro,

Eu usei a sugestão de modificar directamente na variável através do acesso á sua localização de memória, para o que necessito é efectivamente o que faz mais sentido. Eu como estou habituado a linguagens orientadas a objecto, tipicamente retornaria os valores em causa, mas visto não ser possivel em C, de acordo com o que estou a programar é a forma que melhor se adequa.

0

Partilhar esta mensagem


Link 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