Ir para conteúdo


Foto

Estrutura Com Ponteiros (operador Seta)


5 respostas neste tópico

#1 Castro

Castro
  • Membros
  • 105 posts

Postado 05 agosto 2006 - 17:01

dry.gif

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

CODE

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


#2 Denis Bittencourt Muniz

Denis Bittencourt Muniz
  • Veteranos
  • 899 posts
  • Gender:Male
  • Location:São Carlos - SP
  • Interests:Programação em geral, principalmente usando .Net Frameowrk, em qualquer ambiente (Desktop, Web, Mobile, Games, Hardware, etc...).

Postado 05 agosto 2006 - 17:14

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!

using namespace System;

int main(array<String^>^ args)
{
Console::WriteLine("Hello World!!!");
return 0;
}
/*
cl HelloWorld.cpp /clr:pure
*

#3 Castro

Castro
  • Membros
  • 105 posts

Postado 05 agosto 2006 - 17:45

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.

#4 Denis Bittencourt Muniz

Denis Bittencourt Muniz
  • Veteranos
  • 899 posts
  • Gender:Male
  • Location:São Carlos - SP
  • Interests:Programação em geral, principalmente usando .Net Frameowrk, em qualquer ambiente (Desktop, Web, Mobile, Games, Hardware, etc...).

Postado 05 agosto 2006 - 18:20

CODE

#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!
using namespace System;

int main(array<String^>^ args)
{
Console::WriteLine("Hello World!!!");
return 0;
}
/*
cl HelloWorld.cpp /clr:pure
*

#5 Castro

Castro
  • Membros
  • 105 posts

Postado 12 agosto 2006 - 15:56

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

CODE

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 ?

sad.gif

#6 Graymalkin

Graymalkin

    www.gsxbr.net

  • Veteranos
  • 8.167 posts
  • Gender:Male
  • Location:Belford Roxo - RJ

Postado 13 agosto 2006 - 01:55

QUOTE(Castro @ Aug 12 2006, 03:56 PM) Visualizar Post

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

CODE

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:

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


Abraços,

Graymalkin



Responder



  


0 usuário(s) está(ão) lendo este tópico

0 membros, 0 visitantes, 0 membros anônimos