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

hardaway

retornar um vector de inteiros numa funcao

4 mensagens neste tópico

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..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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. 

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