Jump to content

Obter apontador para estrutura localizada num outro ficheiro.c


Leudassdf
 Share

Recommended Posts

Boa tarde pessoal,

EU tenho a seguinte estrutura definida no ficheiro codigoRedes.c

typedef struct informacoesRedes
{
int Id;
char nome[50],localizacao[256];
}infoRedes;
infoRedes *iR;

E agora aquilo que eu queria fazer era criar uma funcao que me passe a estrutura por referencia.

No ficheiro teste.c eu devo criar uma funcao que chamará a funcao de forma a obter os valores que entretanto foram colocados na estrutura informacoesRedes.

Como é possivel fazer isto? Pensei em fazer o seguinte mas infelizmente nao resultou:

struct informacoesRedes *obtemEstruturaRedes()
{
return iR;
}
Link to comment
Share on other sites

Várias notas:

1) Se usas o typedef, porque declaras o tipo da função com struct informacoesRedes? Não será mais fácil e, porventura, legível usares o sinónimo que criaste?

2) Passar a estrutura por referência significa passar o endereço da estrutura com um argumento. O que fizeste foi criar uma função cujo tipo de retorno é um ponteiro, e não é isso que pretendes.

Compara o que fizeste com o que deves fazer 😉

// equivalente do que estás a fazer:
int funcao *argumento() { }

// como deves fazer:
int funcao(int *argumento) { }

Cumprimentos.

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

existe uma solução bem mais simples (já que usas variáveis globais) :

// ficheiro : info_redes.h
typedef struct
{
 int Id;
 char nome[50];
 char localizacao[256];
} infoRedes;

extern infoRedes * iR; // <---- alusão da existência da variável "algures" na aplicação

// ficheiro : info_redes.c
#include "info_redes.h"

infoRedes * iR; // <--- instânciação da variável

// ficheiro : batatas.c
#include "info_redes.h"

int foo(void) {
 return iR->Id; // <--- Ok !!! (se já tiveres alocado a memória claro ...)
}
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

existe uma solução bem mais simples (já que usas variáveis globais) :

// ficheiro : info_redes.h
typedef struct
{
 int Id;
 char nome[50];
 char localizacao[256];
} infoRedes;

extern infoRedes * iR; // <---- alusão da existência da variável "algures" na aplicação

Tenho que ter a estrutura declarada num header?

EU ainda nao percebi o que se deve colocar nos headers.

O extern indica mesmo o que?

Várias notas:

2) Passar a estrutura por referência significa passar o endereço da estrutura com um argumento. O que fizeste foi criar uma função cujo tipo de retorno é um ponteiro, e não é isso que pretendes.

Compara o que fizeste com o que deves fazer 😉

// equivalente do que estás a fazer:
int funcao *argumento() { }

// como deves fazer:
int funcao(int *argumento) { }

Cumprimentos.

isto dos ponteiros ainda me faz alguma confusao. Se eu passar um ponteiro na prática passo o que?

para passar a referencia tenho que adicionar o &?

Se eu fizer int funcao(int *argumento){} tenho, ao chamar a funcao de passar a estrutura certo? mas eu quero e chamar uma funcao que me devolva a estrutura por referencia.

Edited by thoga31
Link to comment
Share on other sites

Escreve as tuas respostas fora das tags quote.

Se eu passar um ponteiro na prática passo o que? [/b]

Responde-me a estas questões: O que é um ponteiro? Onde estão guardados os valores das variáveis de um programa? Como sabe o computador/programa onde ir aceder a esses mesmos valores?

Knowledge is free!

Link to comment
Share on other sites

Escreve as tuas respostas fora das tags quote.

Responde-me a estas questões: O que é um ponteiro? Onde estão guardados os valores das variáveis de um programa? Como sabe o computador/programa onde ir aceder a esses mesmos valores?

A minha ideia de ponteiro:valor que nos vai remeter para outro valor,endereço de memoria.

Onde estão guardados os valores das variáveis de um programa?Nao estao na memoria ram?

Como sabe o computador/programa onde ir aceder a esses mesmos valores? através do endereço de memoria certo?

Link to comment
Share on other sites

Portanto, um apontador não é mais do que um endereço de memória, local onde está guardada determinada informação.

Exemplo:

void duplicar(int *x) {
  // recebe "x" por referência e não por parâmetro (aka cópia de valor).
  (*x) *= 2;
}

int n = 5;  // variável inteira com o valor 5.

duplicar(&n);     // a função vai receber o endereço da variável para a poder alterar directamente.
printf("%d", n);  // estamos a aceder ao valor da variável.

Knowledge is free!

Link to comment
Share on other sites

Portanto, um apontador não é mais do que um endereço de memória, local onde está guardada determinada informação.

Exemplo:

void duplicar(int *x) {
  // recebe "x" por referência e não por parâmetro (aka cópia de valor).
  (*x) *= 2;
}

int n = 5;  // variável inteira com o valor 5.

duplicar(&n);	 // a função vai receber o endereço da variável para a poder alterar directamente.
printf("%d", n);  // estamos a aceder ao valor da variável.

exato. no entanto se tiveres uma estrutura num ficheiro t1.c e quiseres aceder a essa estrutura pelo outro ficheiro t2.c e quiser aceder a partir do do t2.c a estrutura do t1.c? a minha ideia era criar uma funcao no t1.c que devolvesse a estrutura por referencia. No entanto o utilizador HHH ja forneceu outra soluçao.

No entanto aquilo que eu queria é possivel de se fazer?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.