Objetivos
        
    
    
    
    
        
            
                O tipo struct é um tipo de dado complexo que é composto de um ou mais membros de tipos de dados 
                diferentes. Na linguagem C++, diferente de C, as struct aceitam características 
                P.O.O como: atributos, métodos
                e herança, por exemplo. 
            
            
                A sintaxes 1 e 2 abaixo mostram respectivamente a declaração do tipo de dado
                struct e a declaração de uma variável utilizando esse mesmo tipo.
            
            Sintaxe 1
            
struct nome_struct
{
  tipo_dado1 membro1;
  tipo_dado2 membro2;
  tipo_dado3 membroN;
};
            
                O corpo de uma struct é delimitado por { e } e seus membros são separados por (;) e podem ser 
                iniciados ou não. Uma struct deve ser teminada utilizando (;).
            
            Sintaxe 2
            
struct nome_struct nome_variavel; //não iniciada
struct nome_struct nome_variavel = nome_struct { valor_membro1, valor_membro2, ...}
            Exemplo 1
            
#include <iostream>
using namespace std;
struct teste
{
    int valor;
    char caracter;
};
int main(void)
{
    struct teste variavel;
    struct teste variavel2 = teste{1,'Z'};
}
         
     
    
        Accesando e alterando valores de membros
        
     
    
        
            O acesso aos membros de um struct é feita utilizando o operadore (.) seguido do nome do do 
            membro como pode ver visto nas sintaxes abaixo:
        
        Sintaxe: acesso 
        variavel_struct.nome_membro;
        Sintaxe: alteração 
        variavel_struct.nome_membro = valor;
        Exemplo 2
        
#include <iostream>
using namespace std;
struct teste
{
    int valor;
    char caracter;
};
int main(void)
{
    struct teste variavel;
    variavel.valor = 10;
    variavel.caracter = 'A';
    cout << "valor:" << variavel.valor << " caracter:" << variavel.caracter;
    return 0;
}
        Saída
        
10 A
     
    
        Struct como Parâmetro/Argumento
        
     
    
        
            
                O uso de struct como parâmetro de um função e a passagem como argumento é semelhante a como é feito 
                com os outros tipos de dados primitivos. Declaramos um parâmetro com o tipo de dado struct.
            
            Sintaxe
            
tipo_retorno nome_funcao(struct nome_struct nome_param)
{
  //corpo
}
            Onde
            nome_struct: nome do tipo de dado da struct definido.
nome_funcao: nome da função desejada.
            Exemplo 3
            
#include <iostream>
struct teste
{
    int valor;
    char caracter;
};
void funcao(struct teste param)
{
      cout << "valor:" << param.valor << " caracter:" << param.caracter;
}
int main()
{
    struct teste variavel;
    variavel.valor = 10;
    variavel.caracter = 'A';
    funcao(variavel);
}
            Saída
            
valor:10 caracter:A
            
                Os conceitos de passagem por valor e por referência também são aplicados ao uso do tipo de 
                dado struct quando usado como parâmetro/argumento.
            
         
     
    
    
        
            
                O retorno do tipo de dado por uma função é feita da mesma forma utilizada como outros tipos de dados.
                Utilizamos a palavra reservada return seguido da uma variável do tipo struct.
            
            Sintaxe
            struct nome_struct nome_funcao(<lista_parametros>)
{
  //corpo omitido
   return variavel_struct;
}
            Onde
            variavel_struct: variavel to tipo struct retornado.
<lista_parametros>: lista de parâmetros da função.
            Exemplo 4
            
#include <iostream>
using namespace std;
struct teste
{
    int valor;
    char caracter;
};
struct teste funcao(void)
{
    struct teste var1;
    var1.valor = 1;
    var1.caracter = 'A';
    return var1;    
}
int main(void)
{
    struct teste var1 = funcao();
    cout << var1.valor<< endl;    
    return 0;
}
            Saída
            
10
         
     
    
    
        
            
                O uso de structs como matrizes ou vetores é feito da mesma forma que outros tipos de dados. 
                Definimos suas dimensões utilizando [] e acessamos seus elementos utilizando seus índices 
                ou linha e colunas.
            
            Sintaxe: vetor
            struct nome_struct vetor[num_elem] = {valores};
struct nome_struct vetor[indice];
            Sintaxe: matriz
            struct nome_struct matriz[linhas][colunas] = {{valores}};
struct nome_struct matriz[linhas][colunas];
            Onde
            num_elem: número de elementos contido no vetor
linhas: número de linhas da matriz
colunas: número de colunas da matriz
valores: lista de valores
            
                Para iterar elementos de matrizes e vetores os comandos de repetição while ou for podem ser utilizados. Os comandos
                de repetição foram vistos em C++ Comandos de Repetição.
            
            Exemplo 5
            
#include <iostream>
using namespace std;
struct teste
{
    int valor;
    char caracter;
};
int main(void)
{
    struct teste var1;
    struct teste var2;
    
    var1.valor = 1;
    var1.caracter = 'A';
    
    var2.valor = 2;
    var2.caracter = 'B';
    
    struct teste vetor[2];
    vetor[0] = var1;
    vetor[1] = var2;
    
    return 0;
}
            Saída
            
-
         
     
    
        Histórico de atualizações
        
     
    
        
            
                - 28/07/2025 - revisão 3 - correções pontuais; ajuste em sintaxes
 
                - 30/09/2024 - revisão 2 - Correção: Ex. 2, Ex. 3; Ajustes gramaticais pontuais e outros
 
                - 09/02/2024 - revisão 1 - correção em navegação, exemplos e erros gramaticais
 
                - 30/06/2023 - versão inicial
 
            
         
     
    
            
            
                
                    
                    Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
                em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.