C/C++ · 7 min read · Oct 10, 2025

Aprendendo C/C++ Passo a Passo - Página 10

10. Passo a Passo C/C++ — Programação em C - Estrutura

Estruturas

| | 1. Introdução

  1. Declaração de Estrutura
  2. Definindo uma Variável de Estrutura
  3. Inicializando uma Variável de Estrutura
  4. Atribuição direta de estruturas
  5. Cálculo do tamanho da Estrutura
  6. Estruturas Aninhadas
  7. Array de Estruturas
  8. Arrays dentro de Estruturas
  9. Passando Estruturas para Função
  10. Retornando Estruturas de Funções
  11. Ponteiro para estrutura
  12. Estrutura contendo Ponteiros
  13. Estruturas Auto-referenciais |

1. Introdução

| | int a[4] = { 3, 4, 5, 6 };                / Expressão válida /
int a[4] = { 3, 4.23, 5, 6 };                / Expressão inválida /
int a[4] = { 3, “Siglov”, 5,3}                / Expressão inválida / |

Por que as duas últimas expressões são inválidas? Um array pode armazenar valores do mesmo tipo. Deve ser do mesmo tipo. Enquanto uma estrutura pode conter mais de um tipo de dado de acordo com sua definição.

| | • Um grupo de uma ou mais variáveis de diferentes tipos de dados organizadas juntas sob um único nome é chamado de estrutura ou
• Uma coleção de tipos de dados heterogêneos (diferentes) agrupados sob um único nome é chamada de estrutura ou
• Uma estrutura é uma coleção de variáveis simples. A variável em uma estrutura pode ser de diferentes tipos. Os itens de dados em uma estrutura são chamados de membros das estruturas. |

2. Declaração de uma estrutura

Quando uma estrutura é definida, todo o grupo é referenciado através do nome da estrutura. Os componentes individuais presentes na estrutura são chamados de membros da estrutura e podem ser acessados e processados separadamente.

| | |

Ex:

| | struct date
{
int day;
int month;
int year;
}; | struct student
{
int sno;
char name[20];
int marks;
float avg;
}; |

3. Definindo uma Variável de Estrutura

Definir uma variável de estrutura é o mesmo que definir um tipo de dado embutido, como int.

| | int a;                             /  válido /
date d;                          / válido (mas apenas em C++) /
struct date d;                 / válido em C e C++  / |

4. Inicializando uma variável de estrutura

Os membros da estrutura podem ser inicializados como outras variáveis. Isso pode ser feito no momento da declaração ou no tempo de design.

| 1. Inicialização na Declaração:
struct ddate
{
int day;
int month;
int year;
} d = { 27, 10, 2000 }; | 2. Inicialização na Definição:
struct ddate d = { 27, 10, 2000 }; | | 1.
Inicialização no tempo de design: ddate d;
d.day = 27;
d.month = 10;
d.year = 2000;
| 4. Inicialização em tempo de execução:
scanf(“%d%d%d”, &d.day, &d.month, &d.year); |

Ex:

| | / Escreva um programa para aceitar e imprimir os detalhes de um funcionário /
/ 73_struct.c /
#include
struct emp
{
int eno;
char name[20];
float sal;
};
int main()
{
struct emp e;

printf(“Digite o número do Funcionário    :”); scanf(“%d”, &e.eno);
printf(“Digite o nome do Funcionário       :”); scanf(“%s”, e.name);
printf(“Digite o salário do Funcionário      :”); scanf(“%d”, &e.sal);
printf(“\n\nOs Detalhes do Funcionário são os seguintes…. “);
printf(“%d    %s      %d”, e.eno, e.name, e.sal);
return 0;
} |

5. Atribuição direta de estruturas

A atribuição direta de mais de uma variável é possibilitada pelo uso de estruturas.

| | struct emp a, b = {1001, “Vimal”, 6700.00 };
a = b; / Válido /
printf(“%d %s %d” , a.eno, a.name, a.sal ); | | | Saída:
1001 Vimal 6700.00 |

6. Cálculo do tamanho da estrutura

Todo tipo de dado em C/C++ tem um tamanho especificado, ou seja, int tem 2 bytes de tamanho, float tem 4 bytes de tamanho e assim por diante. Aqui está a maneira de encontrar o tamanho de uma variável de estrutura.

sizeof:- Esta função é usada para encontrar o tamanho de uma variável dada.

| | printf(“%d”, sizeof(int));                           //
printf(“%d”, sizeof(float));                       //
printf(“%d”, sizeof(struct emp));              / Exibe o tamanho da estrutura emp / |

7. Estruturas Aninhadas

Estruturas dentro de estruturas são conhecidas como estruturas aninhadas. Para acessar os membros da estrutura aninhada, devemos aplicar o operador ponto duas vezes ao chamar os membros da estrutura.

Ex:

| | / programa para demonstrar estrutura aninhada com estrutura de funcionário /
/ 74_nested.c /
#include
struct emp
{
int eno;
char name[10];
float sal;
struct                                                    / Estrutura Aninhada  /
{
street char[10];
city char[10];
} addr;
};
int main()
{
struct emp e;
printf(“Digite emp_no, emp_name, emp_sal, street, city “);
scanf(“%d%s%d%s%s”, &e.eno, e.name, &e.sal, e.addr.street, e.addr.city );
printf(“\n\nOs Detalhes do Funcionário são os seguintes   …. “);
printf(“%d%s%d%s%s”, e.eno, e.name, e.sal, e.addr.street, e.addr.city );
return 0;
} |

8. Array de Estruturas

Podemos criar um array de estruturas. O array terá estruturas individuais como seus elementos.

| | / Escreva um programa para aceitar e imprimir os detalhes de um funcionário /
/ 75_array.c  /
#include
struct emp
{
int eno;
char name[20];
float sal;
};
int main()
{
struct emp e [10];
int i;
for(i = 0; i<10; i++)
{
printf(“Digite o número do Funcionário    :”); scanf(“%d”, &e [i].eno);
printf(“Digite o nome do Funcionário       :”); scanf(“%s”, e [i].name);
printf(“Digite o salário do Funcionário     :”); scanf(“%d”, &e [i].sal);
}
printf(“\n\nOs Detalhes do Funcionário são os seguintes…. “);
for(i = 0; i<10; i++)
printf(“%d    %s      %d”, e [i].eno, e [i].name, e [i].sal);
return 0;
} |

Nada é novo no programa acima. O programa inteiro é o mesmo que um programa estruturado simples, exceto pelos dados marcados.

9. Arrays dentro de Estruturas

Pode haver uma situação para utilizar arrays dentro de estruturas. Como alcançar arrays dentro de estruturas. Aqui está a abordagem com um programa simples.

| | / Programa para aceitar e imprimir informações de um estudante  /
/ 76_array.c /
#include
struct stud
{
int sno;
char name[10];
int marks[5];                              / Array dentro da estrutura /
};
int main()
{
struct stud s;
int i;
printf(“Digite o número do Estudante  “); scanf(“%d”, &s.sno);
printf(“Digite o nome do Estudante          “); scanf(“%d”, s.name);
for( i = 0; i<3; i++)
{
printf(“Digite as notas do estudante  “); scanf(“%d”, &s.marks[i]);
}
printf(“\n\nOs Registros do Estudante são os seguintes…. “);
printf(“%d  %s  %d  %d  %d”, s.sno, s.name, s.marks[0], s.marks[1], s.marks[2] );
return 0;
} |

10. Passando Estruturas para Funções

É possível enviar estruturas inteiras para funções como argumentos na chamada da função. A variável de estrutura é tratada como qualquer variável comum.

| | / Programa para passar uma variável de estrutura para a função /
/ 77_funct.c /
#include
struct emp
{
int eno;
char name[10];
float sal;
};
void display(struct emp temp);
int main()
{
struct emp e;
display(e);
return 0;
}
void display(struct emp temp)
{
printf(“%d  %s  %d”, temp.eno, temp.name, temp.sal );
} |

11. Retornando Estruturas de funções

Podemos retornar estruturas de funções. Sim, estruturas podem ser retornadas de funções assim como variáveis de qualquer outro tipo.

| | / Retornando objeto de estrutura de uma função /
/ 78_funct.c /
struct emprec
{
int eno;
char name[10];
};
struct emprec read();
void write(struct emprec t);
int main()
{
struct emprec e;
e = read();
write(e);
return 0;
}
void write(struct emprec t)
{
printf(“\n\n%d  %s”, t.eno, t.name);
}
struct emprec read()
{
struct emprec t;
printf(“Digite o número do Funcionário   :”); scanf(“%d”, &t.eno);
printf(“Digite o nome do Funcionário         :”); scanf(“%s”, t.name);
return t;
} |

12. Ponteiro para Estrutura

Até agora, vimos que os membros de uma estrutura podem ser de tipos de dados como int, char, float ou até mesmo estrutura. A linguagem C/C++ também permite declarar uma variável ponteiro como membro de uma estrutura. Variáveis ponteiro podem ser usadas para armazenar o endereço de uma variável de estrutura também. Um ponteiro pode ser declarado como se apontasse para um tipo de dado de estrutura.

| | / Programa para demonstrar o processo de Ponteiro para estrutura /
/ 79_pointer.c /
#include
struct employee
{
int eno;
char name[10];
};
struct employee emp;
int main()
{
emp = (struct employee
)malloc(sizeof(emp));
printf(“Digite os Detalhes do Funcionário ..”);
scanf(“%d%s%”, &emp->eno, emp->name);
printf(“\n\n%d   %s”, emp->eno, emp->name);
return 0;
} |

Os dados marcados são essenciais para implementar ponteiro para estrutura.
A seguinte declaração é opcional, mas é melhor utilizá-la para organizar uma melhor gestão de memória.
emp = (struct employee * )malloc(sizeof(emp));

13. Estruturas Contendo Ponteiros

Uma variável ponteiro também pode ser usada como um membro na estrutura.
O seguinte programa contém membros ponteiro contidos por uma variável ponteiro de estrutura.

| | / programa para demonstrar o uso de estruturas contendo Ponteiros /
/ 80_pointers.c  /
#include
struct
{
int a;
int
b;
} *temp;
int main()
{
int x, y;
x = 20; y = 50;
rk -> a = &x;
rk -> b = &y;

printf(“%d %d “, temp->a, temp->b );
return 0;
} | | | saída:
20    50 |

14. Estruturas Auto-referenciais

Estruturas podem ter membros, que são do tipo da mesma estrutura em que estão incluídos. Isso é possível com ponteiros e o fenômeno é chamado de estruturas auto-referenciais.

| | struct emp
{
int eno;
char name[10];
struct emp *e;
}; |

Estruturas auto-referenciais podem ser usadas principalmente na organização de dados, ordenação, busca de elementos, inserção, exclusão de elementos e assim por diante.

Essa abordagem leva a Estruturas de Dados (ou seja, Listas Ligadas, Pilhas, Filas, Árvores e Grafos).

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.