RuiViana

OperadorSeta.ino

Dec 18th, 2018
222
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //  https://www.scriptbrasil.com.br/forum/topic/82398-estrutura-com-ponteiros-operador-seta/
  2.  
  3. //#define caso1
  4. #define caso2
  5.  
  6. struct tvalor
  7. /*tvalor e o nome da estrutura*/
  8. {
  9.   int var1;
  10.   int var2;
  11.   int var3;
  12. } valores = {10, 20, 30};
  13.  
  14. void setup() {
  15.   Serial.begin(115200);
  16. }
  17.  
  18. void loop() {
  19. #ifdef caso1
  20.   printf ("Mostre o valor do item de dado var1: %d\n", valores.var1, "\n");
  21.   printf ("Mostre o valor do item de dado var2: %d\n", valores.var2, "\n");
  22.   printf ("Mostre o valor do item de dado var3: %d\n", valores.var3, "\n");
  23.   printf ("\n");
  24. #endif
  25.  
  26. #ifdef caso2
  27.   tvalor* pvalores = &valores; //Declaração e inicialização de um ponteiro
  28.    
  29.     /*
  30.             Um ponteiro é uma variável que guarda o endereço de outra
  31.             variável. Com ponteiros você tem acesso direto a memória Heap,
  32.             ganho em desempenho e entre outras vantagens.
  33.     */
  34.    
  35.  //   pvalores->var1 *= 2;
  36.  //   pvalores->var2 *= 2;
  37.  //   pvalores->var3 *= 2;
  38.    
  39.     /*
  40.             Como um ponteiro guarda o endereço da variável, o conteúdo do ponteiro
  41.             é o endereço da variável apontada por ele. Mas um ponteiro pode ter acesso
  42.             ao valor da variável apontada por ele. Para ter acesso ao valor da variável
  43.             que está sendo apontada, use o operador '*'. Exemplo:
  44.                
  45.                 int x = 10;
  46.                 int* p = &x; //Aponte para 'x'
  47.                 int y = *p: //Pegue o conteúdo de x, 10. Já que p está apontando x.
  48.                
  49.                 int* p2 = p;
  50.                 //Aponte para 'x', já que p guarda o endereço de 'x', que é
  51.                 //o conteúdo de p (observe a ausência de '*')
  52.                
  53.                 OBS: o operador '&' é para pegar o endereço da variável indicada, como
  54.                 em 'int* p = &x'
  55.                
  56.                
  57.             Bom, no caso de uma estrutura você faria (para pegar o valor de um dete
  58.             rminado membro. Lembre: pvalores é um ponteiro que aponta para valores):
  59.                  
  60.                  (*pvalores).var1
  61.                  
  62.             Porém, é trabalhoso essa sintaxe. A cada vez que precisar de pegar o valor
  63.             de um membro, não use a sintaxe acima (não que esteja errado, mas é trabalhoso).
  64.             Aí que entra o operador '->'. É um atalho.
  65.            
  66.                pvalores->var1 //Ou (*pvalores).var1
  67.     */
  68.                    
  69.    
  70. //    printf ("visualizacao de itens de dados de uma estrutura na tela:","\n");
  71. //    printf ("\n");
  72. //    printf ("\n");
  73.     printf ("Mostre o valor do item de dado var1: %d\n",valores.var1,"\n");
  74.     printf ("Mostre o valor do item de dado var2: %d\n",valores.var2,"\n");
  75.     printf ("Mostre o valor do item de dado var3: %d\n",valores.var3,"\n");
  76.     printf("Mostre o valor do item de dado var3: %d\n", pvalores->var3,"\n");
  77.     printf ("\n");
  78.  
  79.         //Repare que através do ponteiro foi modificado a estrutura.
  80.         // Já que o ponteiro pvalores apontava para valores
  81. #endif
  82. }
RAW Paste Data