Ir para conteúdo
Fórum Script Brasil
  • 0

Estrutura Com Ponteiros (operador Seta)


Castro

Pergunta

<_<

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);
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

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!

Link para o comentário
Compartilhar em outros sites

  • 0

#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!

Link para o comentário
Compartilhar em outros sites

  • 0

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 ?

:(

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...