Entre para seguir isso  
Seguidores 0

Estrutura Com Ponteiros (operador Seta)

6 posts neste tópico

Postado

<_<

Pessoal estou colocando um exemplo de uso de estrutura, vara ver se algém pode muda-lo, usando operador seta (->).

int main()
{
    struct tvalor

    /*tdada e o nome da estrutura*/
       {
    int var1;
    int var2;
    int var3;
       } valores = {10,20,30};
    /*variavel de estrutura declara e inicializa */

       clrscr();
       printf ("visualizacao de itens de dados de uma estrutura na tela:","\n");
       printf ("\n");
       printf ("\n");
       printf ("Mostre o valor do item de dado var1: %d\n",valores.var1,"\n");
       printf ("Mostre o valor do item de dado var2: %d\n",valores.var2,"\n");
       printf ("Mostre o valor do item de dado var3: %d\n",valores.var3,"\n");
       return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado

No caso, para usar o operador '->', você deve usar um ponteiro.

O operador '->' é equivalente a seguinte expressão: '(*ponteiro).membro'. Você deve fazer-ló (ponteiro) apontar para a sua estrutura:

tvalor* pvalores = &valores; //Ponteiro apontando para a estrutura valor

pvalores->var1; //Retorna 10, pois é o equivalente de (*pvalores).var1

Falows! Qualquer dúvida, post!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado

Não consegui entender. seria mais fácil se você(s) mudasse a arotina que escrevi para que eu visualize o uso do operador seta.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado

#include <stdio.h>
#include <stdlib.h>

int main()
{
    struct tvalor
    {
           int var1;
           int var2;
           int var3;
    } valores = {10, 20, 30};
    
    tvalor* pvalores = &valores; //Declaração e inicialização de um ponteiro
    
    /*
            Um ponteiro é uma variável que guarda o endereço de outra
            variável. Com ponteiros você tem acesso direto a memória Heap,
            ganho em desempenho e entre outras vantagens.
    */
    
    pvalores->var1 *= 2;
    pvalores->var2 *= 2;
    pvalores->var3 *= 2;
    
    /*
            Como um ponteiro guarda o endereço da variável, o conteúdo do ponteiro
            é o endereço da variável apontada por ele. Mas um ponteiro pode ter acesso
            ao valor da variável apontada por ele. Para ter acesso ao valor da variável
            que está sendo apontada, use o operador '*'. Exemplo:
                
                int x = 10;
                int* p = &x; //Aponte para 'x'
                int y = *p: //Pegue o conteúdo de x, 10. Já que p está apontando x.
                
                int* p2 = p; 
                //Aponte para 'x', já que p guarda o endereço de 'x', que é
                //o conteúdo de p (observe a ausência de '*')
                
                OBS: o operador '&' é para pegar o endereço da variável indicada, como
                em 'int* p = &x'
                
                
            Bom, no caso de uma estrutura você faria (para pegar o valor de um dete
            rminado membro. Lembre: pvalores é um ponteiro que aponta para valores):
                 
                 (*pvalores).var1
                 
            Porém, é trabalhoso essa sintaxe. A cada vez que precisar de pegar o valor
            de um membro, não use a sintaxe acima (não que esteja errado, mas é trabalhoso).
            Aí que entra o operador '->'. É um atalho.
            
               pvalores->var1 //Ou (*pvalores).var1
    */
                   
    
    printf ("visualizacao de itens de dados de uma estrutura na tela:","\n");
    printf ("\n");
    printf ("\n");
    printf ("Mostre o valor do item de dado var1: %d\n",valores.var1,"\n");
    printf ("Mostre o valor do item de dado var2: %d\n",valores.var2,"\n");
    printf ("Mostre o valor do item de dado var3: %d\n",valores.var3,"\n");
    system("pause"); 
    return(0);

        //Repare que através do ponteiro foi modificado a estrutura. Já que o ponteiro pvalores apontava para valores
}

Leia os comentários. Qualquer dúvida estamos aí! Falows!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado

Ok, consegui botar o operador seta para funcionar, entretanto, não consegui perceber a vantagem de usa-lo. Se faço,

tvalor* pvalores = &valores;

pvalores->var3 *= 2;

deveria ter uma forma de mostrar pvalores com printf. Tipo:

printf ("Mostre o valor do item de dado var3: %d\n",pvalores.var3,"\n");

e não somente,

printf ("Mostre o valor do item de dado var3: %d\n",valores.var3,"\n");

Como antes. Assim parece dar mais trabalho, e pouco benefício. OO que tem a me dizer ?

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado

Ok, consegui botar o operador seta para funcionar, entretanto, não consegui perceber a vantagem de usa-lo. Se faço,

tvalor* pvalores = &valores;

pvalores->var3 *= 2;

deveria ter uma forma de mostrar pvalores com printf. Tipo: printf("Mostre o valor do item de dado var3: %d\n",pvalores.var3,"\n");
E tem. É só fazer usando a seta:
printf("Mostre o valor do item de dado var3: %d\n", pvalores->var3,"\n");

Abraços,

Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora
Entre para seguir isso  
Seguidores 0