Ponteiro para struct

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!