Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender ponteiro para Struct
  2. Entender o uso de ponteiro para struct como Parâmetro
  3. Entender retorno de ponteiro para struct
  4. Ponteiro como membro de struct
  5. Ponteiro para função como membro de struct

A declaração e atribuição de ponteiro para o tipo de da struct segue o padrão já exemplificado anteriormente para outros tipos de dados:

Sintaxe
struct nome_struct *nome_ponteiro;
Onde
nome_struct: nome da strcut criada.
nome_ponteiro: nome da variável ponteiro para struct.

A maior diferença está na forma de acessar os membros que pertencem a struct. A linguagem C, fornece o operador (->) para trabalhar com ponteiros de structs para acessar seus membros:

Sintaxe
nome_ponteiro->nome_membro;
Exemplo 1
#include <stdio.h>

struct teste
{
    int valor;
    char caracter;
};

int main()
{
    struct teste variavel;
    struct teste *pnt;
    
    //atribuição de valores
    variavel.valor = 10;
    variavel.caracter = 'A';

    //antes:
    printf("%d %c\n",variavel.valor,variavel.caracter);
    
    pnt = &variavel;
    
    //alteração 
    pnt->valor = 11;
    pnt->caracter = 'B';
    
    //depois:
    printf("%d %c \n",variavel.valor,variavel.caracter);
    
    return 0;
}
Saída
10 A
11 B
            

O uso de struct como parâmetro de um função e a passagem como argumento é semelhante aos outros exemplos de outros tipos de dados já discutidos.

Sintaxe
tipo_retorno nome_funcao(struct nome_struct *nome_parametro){ //corpo }
Onde
nome_funcao: nome da função que irá aceitar argumentos/parâmetros.
nome_struct: nome da struct criada.
nome_ponteiro: nome da variável ponteiro para struct.
Exemplo 2
#include <stdio.h>
struct teste
{
    int valor;
    char caracter;
};

void funcao(struct teste *parametro)
{
    parametro->valor++;
    parametro->caracter = 'Z';
}

int main()
{
    struct teste variavel;

    variavel.valor = 10;
    variavel.caracter = 'A';

    printf("%d %c\n",variavel.valor,variavel.caracter);
    funcao(&variavel);
    printf("%d %c \n",variavel.valor,variavel.caracter);
    
    return 0;
}
Saída
10 A
11 Z
            

Para retornarmos um ponteiro de struct de uma função, de forma semelhante ao que já foi visto sobre o retorno de dados em funções, declaramos o retorno de uma função como o tipo de dado ponteiro para struct.

Sintaxe
struct nome_struct *nome_funcao(parametros)
{
  //corpo
  return nome_ponteiro;
}
Onde
nome_funcao: nome da função que irá aceitar argumentos/parâmetros.
nome_struct: nome da struct criada.
nome_ponteiro: nome da variável ponteiro para struct.
parametros: lista de parâmetros separados por (,).
Exemplo 3
#include <stdio.h>
struct teste
{
    int valor;
    char caracter;
};

struct teste *funcao(void)
{
    struct teste variavel;
    variavel.valor = 10;
    variavel.caracter = 'A';
 
    struct teste *ponteiro = &variavel;
  
    return ponteiro;
}

int main()
{
    struct teste *ponteiro = NULL;
    ponteiro = funcao();
    printf("%d %c \n",ponteiro->valor,ponteiro->caracter);
    return 0;
}
Saída
10 A
            
  1. 11/03/2025 - revisão 4 - Ajuste em sintaxes;
  2. 07/10/2024 - revisão 3 - Correção: link 'Anterior', ajustes pontuais
  3. 30/08/2024 - revisão 2 - Correção em links de objetivos
  4. 02/10/2023 - revisão 1 - Correção em referências, erros gramaticais
  5. 19/05/2023 - versão inicial