Programação
 › Algoritmo  › C/C++  › Java
Web
 › HTML/XHTML  › JavaScript  › PHP
Sistema Operacional
 › Comandos de DOS  › Windows  › Linux  › Mac/BSD
Office
 › Word / Writer  › Excel / Calc
Áreas do Site
 › Download  › Fórum  › Blog
Recomendamos
Computadores e Informática em Lisboa
TI Expert » Programação » C/C++ » Ponteiros de Struct

Ponteiro de Struct

Vimos a pouco como criar uma estrutura de dados agrupado (struct), como definir um nome à essa estrutura com typedef e como criar um ponteiro para indicar um endereço de memória.

Agora, vamos nos aprofundar um pouco mais nesse assunto vendo como procedemos com um ponteiro de struct.

Como vimos anteriormente, um struct consiste em vários dados agrupados em apenas um. Para acessarmos cada um desses dados, usamos um ponto (.) para indicar que o nome seguinte é o nome do membro.

Um ponteiro guarda o endereço de memória que pode ser acessado diretamente.

O problema aqui está no seguinte, como acessaremos um membro de uma estrutura de dados usando um ponteiro? Pois é simples. Para isso, basta usarmos o que chamamos de "seta". A "seta" consiste de um sinal de menos e um maior (->).

Portanto, podemos criar nosso struct do mesmo jeito de sempre e nosso ponteiro também. Mas, quando formos acessar um membro dessa estrutura usando um ponteiro nós não usaremos um ponto, mas uma seta.

Vejamos:

#include <iostream>
#include <cstdlib>
using namespace std;

typedef struct data Data;

struct data {
    short dia;
    short mes;
    int ano;
};

int main (void){
    Data data; //variável data do tipo struct data
    Data *hoje; //ponteiro hoje para um tipo struct data
    hoje = &data; //hoje aponta para o endereço de data

    //dados sendo inseridos na variável data
    hoje->dia = 20;
    hoje->mes = 1;
    hoje->ano = 2009;

    //mostrando o que está gravado no endereço contido em hoje
    cout << "Data registrada:"<<endl;
    cout << hoje->dia <<"/"<< hoje->mes <<"/"<< hoje->ano << endl;
    system ("pause");
}

Agora, há mais uma maneira de acessarmos um membro da estrutura usando um ponteiro. Esta outra forma consiste em indicar de qual ponteiro nos referimos colocando o dereferenciador entre parenteses, assim (*hoje). Dessa forma podemos acessar diretamente usando um ponto (.).

No exemplo abaixo usamos apenas ponteiros com dereferenciador para escrever no struct data.

#include <iostream>
#include <cstdlib>
using namespace std;

typedef struct data Data;

struct data {
    short dia;
    short mes;
    int ano;
};

int main (void){
    Data data; //variável data do tipo struct data
    Data *hoje; //ponteiro hoje para um tipo struct data
    hoje = &data; //hoje aponta para o endereço de data

    //dados sendo inseridos na variável data
    (*hoje).dia = 20;
    (*hoje).mes = 1;
    (*hoje).ano = 2009;

    //mostrando o que está gravado no endereço contido em hoje
    cout << "Data registrada:"<<endl;
    cout << (*hoje).dia <<"/"<< (*hoje).mes <<"/"<< (*hoje).ano << endl;
    system ("pause");
}

Concluindo, podemos acessar um membro de um tipo de dado estrutura de dado usando ponteiro de duas formas:

Usando um dereferenciador entre parênteses e um ponto (.) para indicar o membro.

Usando o próprio ponteiro e uma seta (->) para indicar o membro.

Creative Commons License
Autor: Denys William Xavier
Este artigo está sob Licença Creative Commons.

Faça o download da versão em PDF Indique nosso site Gostou?
Indique nosso site!
Este artigo foi
lido 77716 vezes
Bookmark e Compartilhe

Páginas Relacionadas

Enquete
O Google Chrome OS irá desbancar o Microsoft Windows 7?
» ProgramaçãoAlgorítmo | C/C++ | Java

» WebHTML/XHTML | JavaScript | PHP

» Sistema OperacionalComandos de DOS | Windows | Linux | Mac/BSD

» OfficeWord/Wirter | Excel/Calc

» Áreas do SiteDownloads | Fórum | Blog