1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C guardar endereço..

Discussão em 'Programação' iniciada por #treze, 7 de Janeiro de 2008. (Respostas: 5; Visualizações: 1089)

  1. 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..
     
  2. napalm

    napalm Power Member

    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: 7 de Janeiro de 2008
  3. humm...
    e da mesma forma k guardo a string tb posso guardar o endereço de uma estrutura?
     
  4. SL87

    SL87 Power Member

    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,
     
  5. Consu

    Consu Power Member


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

    SL87 Power Member

    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.
     

Partilhar esta Página