C guardar endereço..

#treze

Membro
Boas meus caros..
Tou a fazer um trabalho pa uma cadeira na universidade que consiste num gestor de email num determinado formato, sendo a linguagem utilizada -> C.Uma das minhas estruturas auxiliares é uma hastable k interliga um array a cada avl balanceada.Ora o meu problema nao reside na estrutura em si, mas sim no que la tenciono guardar.Resolvi "tentar" que em cada nodo destas avl contivesse um inteiro que guardasse o endereço respectivo do seu nodo na AVL principal do trabalho.Tou a ter problemas nessa ultima parte uma vez que nao estou a conseguir guardar esse endereço num inteiro.Já agora se o que eu estou a tentar fazer for impossivel agradecia o heads up..
Agradeço desde já uma possivel ajuda..
 
Não guardas endereços explicitamente em inteiros mas sim em ponteiros (inteiros cujo conteúdo é um endereço de memória)
Aqui vai um exemplo:
Código:
char* frase = "um teste"; // guarda endereço do primeiro carácter da cadeia
char* letra = &frase[3];  // guarda endereço do 4º carácter
char* letra = &(frase+3); // mesma coisa que o anterior
printf("%c\n", *letra);   // toma o conteúdo do ponteiro, imprimindo o carácter "t"
printf("%s\n", letra);    // toma o endereço do ponteiro, imprimindo a cadeia "teste"
 
Última edição:
Sim. Podes guardar o endereço para a estrutura com um char*.
struct ex{
int a;
char c;
int b;
}

ate podes meter um ponteiro char* a apontar para o b.
Exemplo


struct ex s;
char *p;
p=&s; //aponta para a estrutura ou seja para o primeiro byte ou seja para o a
p=&s+sizeof(int)+sizeof(char); // aponta para o b;

é óbvio que tens de ter atenção a como usas as coisas:
ex: printf("%c",p) é diferente de printf("%d",p)

isto pode parecer estranho e não é a melhor maneira de usar.
Mas foi a melhor maneira de explicar ate onde podes ir.

PS: Não é minha intenção baralhar,
 
Sim. Podes guardar o endereço para a estrutura com um char*.
struct ex{
int a;
char c;
int b;
}

ate podes meter um ponteiro char* a apontar para o b.
Exemplo


struct ex s;
char *p;
p=&s; //aponta para a estrutura ou seja para o primeiro byte ou seja para o a
p=&s+sizeof(int)+sizeof(char); // aponta para o b;


Essa não é a melhor solução. Se usares typedef para definires um "novo" tipo de dados, que será a estrutura que pretendes, fica mais simples.

Código:
typedef struct Ex {
int a;
char c;
int b;
} Ex;
Assim podes usar desta forma:

Código:
struct Ex s;
Ex *p;
p=&s;
Aqui não é necessário o sizeof porque o compilador já reconhece o tipo de dados.
No caso de não usares typedef podes sempre usar struct Ex*, mas a meu ver fica mais confuso.

No caso de queres usar um apontador genérico, usa-se void* e claro que aí tens de ter cuidado com o avançar e retroceder com o apontador, dado que ele andará byte a byte.
 
Consu, o sizeof não é para defenir o tamanho da extrutura, e pra defenir o numero de bytes que queres avançar,com o ponteiro, apartir do inicio da estrutura. E uso o sizeof pk torna o codigo mais portavel, pois n sei que tamanho vai ter um inteiro na máquina onde o codigo pode ser compilado. É obvio que que podes sempre por 4 bytes para o inteiro e 1 byte para o char.
 
Back
Topo