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

Em C, Estruturas e "->".

Discussão em 'Programação' iniciada por X3minater, 2 de Janeiro de 2008. (Respostas: 9; Visualizações: 1610)

  1. X3minater

    X3minater Power Member

    Boas, tenho aqui uma duvida...

    Se tivermos uma estrutura dentro de outra estrutura, por exemplo:

    Código:
     
    struct blabla
    {
     int n;
     int i;
     struct blabla_in
     {
      char a[5+1];
      int b;
     }
     struct blabla *prox;
    }
    
    Se nos refericemos ao n ou ao i num printf("...%d...", ...) seria: walker->i ou walker->n, certo? (Sendo walker uma variavel do tipo: struct blabla)


    Mas como é que nos referimos ao a[5+1] e ao b num printf??? Da mesma maneira?


    É um bocado urgente!!!


    EDIT: E será que tenho de por: "struct blabla_in *prox" para os elementos estarem ligados em forma de lista???
     
    Última edição: 2 de Janeiro de 2008
  2. Baderous

    Baderous Banido

    Por uma questão de simplicidade eu dividiria o código da seguinte maneira:

    Código:
    struct blabla {
           int n;
           int i;
           blabla_in x;
           struct blabla *prox;
           }
           
    struct blabla_in {
           char a[5+1];
           int b;
           }
    E assim podias fazer: walker -> x -> b para aceder ao b. (Não testei o que escrevi).
     
  3. r3pek

    r3pek Power Member

    nop.... os "->" é só no caso da estrutura estar num pointer....
    por exemplo, usando a estrutura k deste:

    struct blabla teste1;
    struct blabla *teste2 = &teste1;

    printf("%d\n", teste1.n);
    printf("%d\n", teste2->n);


    printf("%d\n", teste1.blabla_in.b);
    printf("%d\n", teste2->blabla_in->b); // No caso da estrutura dentro da estrutura sem um pointer também

    printf("%d\n", teste2->blabla_in.b); // No caso da estrutura dentro da estrutura não ser um pointer
    printf("%d\n", teste1.blabla_in->b); // No caso da estrutura dentro da estrutura ser um pointer e a outra nao.


    axo k me explikei embora possa ser um pouco confuso. basicamente, se for pointer usa-se "->", senão, usa-se o "."
     
  4. Baderous

    Baderous Banido

    Exacto, esqueci-me de referir isso.
     
  5. X3minater

    X3minater Power Member

    Sim, eskeci-me de dizer... tenho um apontador (walker) do tipo struct blabla...
    Mas como é que eu faço para ter acesso ao valores da estrutura dentro da estrutura?? Tenho de declarar um apontador do tipo "struct blabla_in"???
    E responde lá ao EDIT sff!
     
    Última edição: 2 de Janeiro de 2008
  6. r3pek

    r3pek Power Member

    ve os meus ultimos 4 exemplos.
    respondendo ao edit: sim.
     
  7. X3minater

    X3minater Power Member

    Mas tenho de declarar um apontador do tipo struct blabla_in???

    Ou ponho so: walker->blabla_in->b ???

    (walker apontador de blabla)
     
  8. Baderous

    Baderous Banido

    Se não quiseres declarar o apontador para blabla_in fazes: walker->blabla_in.b
     
  9. X3minater

    X3minater Power Member

    Código:
     
    struct blabla
    {
     int n;
     int i;
     struct blabla_in
     {
      char a[5+1];
      int b;
     }
     
    E para declarar um apontador para blabla_in como faço?

    "struct blabla_in* ptr;"

    ?? não tem de levar nada a tras de "struct"?
    ou tenho de fazer um typedef:
    Código:
      
    struct blabla
    {
     int n;
     int i;
     struct blabla_in
     {
      char a[5+1];
      int b;
     }
     
    typedef struct blabla_in BLAIN;
    
    ???
     
  10. Sim, podes fazer assim. ;)
     

Partilhar esta Página