Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

hardaway

retornar um vector de inteiros numa funcao

Mensagens Recomendadas

hardaway    0
hardaway

boas... estou aqui com um problema se me conseguirem ajudar agradeco...

tenho uma funcao que guarda dois inteiros, como faço para retornar os dois? vector de inteiros?

ja tentei :

int v[2];

v[0]=1;

v[1]=2;

return(v);

é assim?

desde ja o meu obrigado..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

Tens duas hipóteses:

Ou fazes a alocação de espaço antes de chamares a função, e passas o pointer como parâmetro à função:

void funcao(int *v) {
v[0]=1;
v[1]=2;
}

void main() {
int i[2];
funcao(i);
}

que penso que seja o método mais seguro;

Ou então fazes um malloc dentro da função e retornas o pointer obtido, mas tendo em atenção que depois tens que libertar o espaço utilizado:

int *funcao() {
int *v = malloc(2*sizeof(int));
v[0]=1;
v[1]=2;
return v;
}

void main() {
int x, y, *i=funcao();
x=i[0];
y=i[1];
free(i);
}

Este assunto já foi discutido, e embora o código que apresentaste seja válido e possa funcionar, não há garantias de que isso aconteça. Aliás, alguns compiladores emitem um warning quando tentares compilar esse código.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Black Tiger III    0
Black Tiger III

Para fazer retornar, o preferivel e usares apontadores, sim e a unica maneira de retornares array's. eu lembro-me k ja tive um grande problema desses em test mooshack

#include <stdio.h>

int *ver();

int *la()
{
int A, *Pta;
Pta=&A;
*Pta=23;
printf("%d\n",A);
return Pta;
}

int main()
{
int A,*Pts;
Pts=&A;
Pts=la();
printf("%d+2\n",*Pts);

int *Ptb;
Ptb=ver();
while(*Ptb!=0)
{
printf("%d ",*Ptb);
Ptb++;
}
puts("");
return 0;
}

int *ver()
{
static int A[9]={9,99,8888,4,5,6,7,8,0};
int *Pta=A;
return Pta;
}

isto foi o k eu fiz para aprender a retornar vectores, a partir daki podes retornao tanto de inteiros cm de char's

fica bem

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

int *la()
{
int A, *Pta;
Pta=&A;
*Pta=23;
printf("%d\n",A);
return Pta;
}
[/quote]
A variável A é local à função la, por isso põe-se o mesmo problema que no código original do hardaway.

Retornar o endereço de uma variável local estática também não é boa prática, embora funcione sempre e seja (parcialmente) seguro. Parcialmente porque numa chamada subsequente à função pode ser alterado o valor da variável, e depois pode dar maus resultados quando tentamos obter o valor novamente e não nos recordamos que foi alterado na função. 

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade