Duvida Funcao [RESOLVIDO]

1. Duvida Funcao [RESOLVIDO]

Bruna Almeida
FennFelis

(usa Ubuntu)

Enviado em 18/04/2012 - 18:08h

Bom dia, eu andei procurando já, mas não encontrei uma solução clara.
Queria saber se em C, existe a seguinte possibilidade, retornar o endereço de uma variavel.

tentei fazer isso daqui, mas nao ficou certo

int& funcao(int *j){
return &j;
}

int main(){
int i, *j=6;
i=funcao(&j);
}


Sempre da erro, tentei mudar o int& para int*, retornaria o ponteiro sim, mas quero o retorno do endereço da variavel


  


2. Re: Duvida Funcao [RESOLVIDO]

Bruno Rogério Fernandes
brunorf

(usa Arch Linux)

Enviado em 18/04/2012 - 19:42h

Cara, o ponteiro que você disse CONTÉM/APONTA PARA o endereço da variável, esse é o conceito de ponteiros.


int* funcao(int *j){
return j;
}

int main(){
//int i, *j=6; //assim você está fazendo j receber o endereço 6, acho que não era o que você queria
int i, *j;
i = 6;

j=funcao(&i);

//não é necessário a função
//assim, de forma muito mais simples
j = &i;

//caso queira "observar" o endereço
printf("%p\n", j);
}



3. Re: Duvida Funcao [RESOLVIDO]

Bruno Rogério Fernandes
brunorf

(usa Arch Linux)

Enviado em 18/04/2012 - 19:51h

Ah sim, quase me esquecendo. Caso você queira que a função retorne o VALOR NUMÉRICO do endereço, então você deveria fazer:


#include <stdio.h>

long funcao(int *j){
return (long)j;
}

int main(){
int i;
i = 6;

printf("%ld\n", funcao(&i));

}


Observe que j em funcao é um ponteiro. Assim, fiz um cast de seu valor para um long.


4. Re: Duvida Funcao [RESOLVIDO]

Bruna Almeida
FennFelis

(usa Ubuntu)

Enviado em 18/04/2012 - 20:14h

brunorf escreveu:

Ah sim, quase me esquecendo. Caso você queira que a função retorne o VALOR NUMÉRICO do endereço, então você deveria fazer:


#include <stdio.h>

long funcao(int *j){
return (long)j;
}

int main(){
int i;
i = 6;

printf("%ld\n", funcao(&i));

}


Observe que j em funcao é um ponteiro. Assim, fiz um cast de seu valor para um long.


Sim, mas eu queria que retornasse um ponteiro para um endereço de outro ponteiro, estou na dificuldade nisso e na forma com que eu passo os argumentos



5. Re: Duvida Funcao [RESOLVIDO]

Bruno Rogério Fernandes
brunorf

(usa Arch Linux)

Enviado em 18/04/2012 - 20:30h

Então basta usar um ponteiro de ponteiro uai:


#include <stdio.h>

int main(){
int i, *j, **k;
i = 3;
j = &i;
k = &j;

printf("Endereço de j:%p\n", k);
printf("Endereço de i:%p\n", j);
printf("Valor de i:%d\n", **k);
}



6. Re: Duvida Funcao [RESOLVIDO]

Bruna Almeida
FennFelis

(usa Ubuntu)

Enviado em 18/04/2012 - 21:15h

brunorf escreveu:

Então basta usar um ponteiro de ponteiro uai:


#include <stdio.h>

int main(){
int i, *j, **k;
i = 3;
j = &i;
k = &j;

printf("Endereço de j:%p\n", k);
printf("Endereço de i:%p\n", j);
printf("Valor de i:%d\n", **k);
}


Entao cara ai que ta, estou tentando criar uma funcao que, se der determinado valor, retorne um endereço de variavel diferente, para que eu nao fique testando todos os possiveis casos (8³ linhas para 25 funcao), entende?
entao eu pensei nisso daqui:


#include <stdio.h>

struct tipo{
int r_valor1;
int r_valor2;
int r_valor3;
/*
...
*/
};



void funcao1(struct tipo *m, int val_1, int val_2, int val_3){
//val_1 e val_2 e val_3 pode assumir valores 1, 2 ou 3.
//Se val_1==1, entao eu pego a variavel m.r_valor1
//Se val_1==2, entao eu pego a variavel m.r_valor2
//Se val_1==3, entao eu pego a variavel m.r_valor3
//Se val_2==1, entao eu pego a variavel m.r_valor1
//Assim por diante ate val_3==3, entao pego a variavel m.r_valor3

//Um metodo para se fazer isso é usando a combinacao (3³)
//Outro seria buscar o endereco da variavel, justamente isso q quero fazer, mas nao consigo
//Entao pensei em buscar o valor da val_1 e retornar o endereco r_valor1 ou r_valor2 ou r_valor3
//e fazer tipo isso daqui
//funcao2 que eu n sei se é bem assim mesmo, ou necessitaria de um ponteiro.
//Ex: p=funcao2(m, val_1), inclusive n sei se m deveria passar com ou sem &

soma(funcao2(m, val_1), funcao2(m, val_2), funcao2(m, val_3));
//soma(arg1, arg2, arg3) seria arg1=arg2+arg3
}

int main(){
struct tipo m;
m.r_valor1=0;
m.r_valor2=2;
m.r_valor3=-1;

int valor_1, valor_2, valor_3;

funcao1(&m, valor_1, valor_2, valor_3);

return 0;
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts