Por: Eduardo Casavella
É possível criar um ponteiro para uma struct, de forma semelhante à criação de ponteiro para outros tipos de dados.
Para acessar os dados dos membros de uma struct usamos o operador ponto .
Tomemos como exemplo a struct abaixo.
typedef struct { int matricula ; float nota; }tAluno;
Declaramos a1 como sendo uma struct do tipo tAluno.
tAluno a1 ;
Em seguida, criamos o ponteiro *ptrAluno do tipo tAluno que recebe o endereço de a1;
tAluno *ptrAluno = &a1;
Quando temos um ponteiro para uma struct podemos acessar os membros da struct da seguinte forma:
(*ptrAluno).nota
Exemplo: (*ptrAluno).nota = 8.5;
Na realidade estamos usando o * para dereferenciar o ponteiro e o . para acessar o membro da struct.
O operador -> permite fazer isso de forma mais simples.
Exemplo: ptrAluno->nota = 8.5;
Sendo assim, ptrAluno->nota equivale a (*ptrAluno).nota
Vamos a um exemplo prático em código.
#include<stdio.h> #include<stdlib.h> //Usando typedef na struct para encurtar o comando na declaração typedef struct { int matricula ; float nota; }tAluno; int main (void) { //a1 é uma struct do tipo tAluno tAluno a1 ; //*ptrAluno é um ponteiro do tipo tAluno que //recebe o endereço de a1; tAluno *ptrAluno = &a1; //Atribuindo valores para os membros da struct a1 a1.matricula =555; a1.nota = 8.0; //exibindo dados usando a struct diretamente usando . printf ("matricula: %d nota: %.2f \n",a1.matricula,a1.nota); //Podemos atribuir ou acessar um valor usando o ponteiro (*ptrAluno) (*ptrAluno).nota = 8.5; //exibindo dados usando um ponteiro para struct printf ("\nmatricula: %d nota: %.2f \n",(*ptrAluno).matricula,(*ptrAluno).nota); //ptrAluno-> substitui a notação (*ptrAluno). de forma mais intuitiva //atribuindo um novo valor para a nota usando ptrAluno-> ptrAluno->nota = 9.0; //portanto (*ptrAluno).nota é o mesmo que usar ptrAluno->nota printf ("\nmatricula: %d nota: %.2f \n",ptrAluno->matricula,ptrAluno->nota); getch(); return 0; }
Vejamos este código em execução:
Até a próxima!
Uma resposta a Ponteiro para struct