Buscar

Texto sobre Struct e Ponteiros

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 9 páginas

Prévia do material em texto

AULA de Struct e Ponteiro
Tema: Unidade 3: Agregado Heterogêneo : Motivação e implementação de Pilha usando agregado heterogêneo. 
Unidade 4 : Ponteiros : Definição de ponteiro, Operador de endereço, operador de indireção e operador seta
Objetivo: O aluno deverá ser capaz de :
- compreender agregado heterogêneo (struct)
- realizar tarefas práticas com structs e as estruturas de dados estudadas
- conceituar  ponteiro 
-  compreender o uso de ponteiro no estudo de listas lineares
- conceituar os operadores & e *
-  manipular ponteiro com os operadores & e * 
- compreender o uso do operador seta (->)
-  manipular struct através de ponteiro e do operador seta.
Conteúdo
- struct : motivação através de exemplos
- struct :  definição, declaração de variáveis, acesso aos campos e vetor de structs, através de exemplos.
- desenvolvimento de tarefa prática com pilha e struct
- motivação para o estudo de ponteiro com listas lineares
- conceito de ponteiro, através de exemplos com os operadores * e  &.
- conceito e uso do operador seta com ponteiro e struct, através de exemplos.
Suporte Conceitual
 struct :  palavra reservada nas linguagens C  e C++,  que permite criar um tipo de dados definido pelo programador,  agregando dados de tipos diferentes em campos.
 
Como definir um tipo com struct ?
 
Regra geral:    
 
struct   <identificador >  {
          <tipo1>   <campo1>;
          <tipo2>   <campo2>;
                                                         ...
            <tipon>  <campon>;
      };
 
onde identificador é o identificador da struct.
 
Como declarar uma variável de um tipo struct ?
 
Regra geral:    
 
1ª forma ) 
 
struct  <identificador>    <lista de variáveis>;
 
2ª forma) 
 
<identificador>      <lista de variáveis>;
   
 
Como acessar um campo de uma struct ? Usando o operador ponto entre a variável struct e o campo que se deseja acessar.
 
Regra geral:    
<variável struct> . <campo>
                           
Uma variável struct pode ser atribuída diretamente a outra variável struct do mesmo tipo, sem ser necessário fazer uma atribuição campo a campo.
 
Ponteiro é uma variável que contém o endereço de memória de outra variável.  Diz-se que o ponteiro “aponta” para a variável cujo endereço ele armazena.  
 
Representação gráfica de ponteiro : seta ou símbolo de aterramento (herdado da eletricidade), no caso do ponteiro ser nulo (NULL).
 
Notas : 
 
1)  NULL é uma constante pré-definida na linguagem.
2)  Aceita-se 0 ou NULL, quando se trata de ponteiros
 
Declaração de ponteiro :
 
       Forma geral :  
 
    <tipo>   *<variável_ponteiro>;
 
Operador de endereço :  &   
  Fornece o endereço de seu operando.
 
Operador de indireção  ou de referência  :   *
   Fornece o conteúdo da área apontada pelo ponteiro.
 
Operador seta :  (->)
   Permite acessar o campo de uma struct apontada por um ponteiro.
 
Regra geral:    
 
<ponteiro> -> <campo>
 
 
 
 
 
 
Exemplos:
 
Exemplo 1 : 
 
struct  aluno {
                                   int matricula;
                                   char nome[40];
                                   float media;
                       };
 
Definimos um tipo, mas é preciso declarar variáveis para armazenar os dados da aplicação.  Então, como declarar uma variável do tipo struct aluno ? Em C++, fazemos :
 
struct aluno x, y, z;
 
ou apenas
 
aluno x, y, z;
 
Serão alocados na memória, espaço para 3 agregados de dados :
                             x, y e z.
 
Podemos visualizar, por exemplo,  da seguinte forma :
 
 
     
 
 
a)
 
x.media = 9.5;             // Define uma média específica
x.matricula = 1205;     // Define uma matrícula específica
cout << “Matricula = “ 
         << x.matricula; // Imprime a  matrícula
cout << “Media = “ << x.media;
 
 
b)
 
cout << “Digite o nome : “ ;
cin.getline(x.nome,40);  //obtém o nome via teclado
cout << “Nome fornecido => “ << x.nome << endl;
 
O mesmo poderá ser feito com as variáveis y e z.
 
 
Exemplo 2 :   
 
struct livro {
                       char titulo[60];
                      char categoria[30]; //suspense, ação, etc...
                       float preco;
  };
 
Daí, é possível declarar, por exemplo :
 
   struct livro L1, L2;      ou    livro L1, L2;
 
Pode-se fazer, por exemplo :    
       
L1.preco = 25.99;
L2.preco = L1.preco + 10;
 
Exemplo 3 :   
 
            struct carta
 {
                           char naipe[7];
                        int numero;
            };
 
Daí, é possível declarar, por exemplo :
 
            struct carta c1, c2;     ou   carta c1, c2;
 
Pode-se fazer, por exemplo :    c1.numero = 10;
 
 
 Ponteiro 
 
 
·         Objetivo :  
 
Motivação para o uso de ponteiro
Definir, através de exemplos, ponteiro e os operadores & e *.
Definir através de exemplos o uso do operador seta (ponteiro para struct)
 
Procedimento :
 
 
Exemplo1: Ensina: Definição de ponteiro, 
                                  operadores & e *.
 
int x = 10, 
     y, 
    *p;  //p é um ponteiro para int
 
p = &x;     //p recebe o endereço de x
y = *p;      // y recebe o conteúdo da área apontada por p
cout   << “x vale =  “ << x     << endl
          << “y vale =  “ << y     << endl
          << “*p vale =  “ << *p  << endl
            << “p vale =  “ << p    << endl;
 
 
 
Exemplo 2:  Ensina : Ponteiro recebe ponteiro e ponteiro nulo
 
int x = 10, *p, *q, *r;
 
p = &x;    //p recebe o endereço de x
q =  p;     
*q = 20;  // o conteúdo da área apontada por q recebe 20
r = NULL; // r recebe NULL
     
 cout << "x vale =    "  << x  << endl
          << "*q vale =   " << *q  << endl
          << "*p vale =   " << *p << endl
          << "p vale =     "  << p  << endl
          << "q vale =     "  << q  << endl 
          << "r vale =     "  << r  << endl;
 
Comentário:
1)    Como r é NULL, não tem sentido falar em *r, pois *r não existe.
2)    NULL é uma constante pré-definida na linguagem.
3)    Aceita-se 0 ou NULL, quando se trata de ponteiros
 
 
Exemplo 3:  Ensina :  Ponteiro para struct
 
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
// define um tipo
struct aluno
 {
         int matricula;
         float media;
  };
            
            
int main()
{
  // declara duas variáveis do tipo aluno
   aluno a, b;
 
  // declara um ponteiro para aluno
   aluno *p;
   
   a.matricula = 10;
   a.media = 6.8;
   
   p = &a;
   
   b = a;   // atribui uma struct a outra
   
   (*p).matricula = 100;  //acessa o campo matricula
   (*p).media =  9.5;
   
   cout << "Matricula de a = " 
           << a.matricula << endl
           << "Media de a = " 
           << a.media << endl;
        
   cout << "Matricula de b = " 
          << b.matricula << endl
          << "Media de b = " 
          << b.media << endl;  
   
   system("pause");  
}
 
  
Exemplo 4:  Ensina :  Ponteiro para struct com operador seta
 
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
// define um tipo
struct aluno
 {
       int matricula;
       float media;
 };
            
            
int main()
{
  // declara duas variáveis do tipo aluno
   aluno a, b;
 
  // declara um ponteiro para aluno
   aluno *p;
   
   a.matricula = 10;
   a.media = 6.8;
   
   p = &a;
   
   b = a;   // atribui uma struct a outra
   
   p->matricula = 100;  //acessa o campo matricula
   p->media =  9.5;
   
   cout << "Matricula de a = " 
           << a.matricula << endl
           << "Media de a = " 
           << a.media << endl;
        
   cout << "Matricula de b = " 
          << b.matricula << endl
            << "Media de b = " 
          << b.media << endl;  
   
   system("pause");  
}

Outros materiais