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.