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