Estruturas (Struct)
Muitas vezes, ao desenvolver programas de computador, é interessante agrupar um conjunto de variáveis (que podem ser de tipos diferentes) em uma unica variável. Em linguagem C isso é possível através da declaração e manipulação de estruturas (struct). Veja abaixo um exemplo:
#include <stdio.h>
#include <strings.h>
struct pessoa {
char nome[100];
char telefone[100];
int idade;
float altura;
};
int main() {
struct pessoa p;
int idade;
float altura;
strcpy( p.nome, "Maria" );
strcpy( p.telefone, "12345678" );
p.idade = 25;
p.altura = 1.65;
idade = p.idade;
altura = p.altura;
printf( "O nome eh......: %s", p.nome );
printf( "\nO telefone eh..: %s", p.telefone );
printf( "\nA idade eh.....: %d", idade );
printf( "\nA altura eh....: %.2f", altura );
return 0;
}
No exemplo acima, é declarada uma estrutura com dados de uma pessoa. Para declarar no programa principal, perceba que é necessário utilizar a palavra reservada struct antes do tipo pessoa. Repare também que para manipular as variáveis da estrutura, é necessário acessá-las com um ponto. Ex: p.nome para manipular a variável nome da estrutura pessoa.
Definição de tipos (typedef)
A linguagem C permite que o programador defina seus próprios tipos de dados, atravéz do comando typedef. Veja os exemplos abaixo:
typedef int inteiro;
typedef int boolean;
typedef int vetorinteiro[10];
Os exemplos de typedef acima são todos válidos. O primeiro cria um tipo de nome inteiro equivalente a o tipo int, o segundo cria o tipo boolean equivalente ao tipo int, e o terceiro cria um tipo vetor de inteiros de 10 posições. Abaixo, dois exemplos equivalentes de definição de tipo para uma estrutura:
struct st_pessoa {
char nome[100];
int idade;
};
typedef struct st_pessoa pessoa;
typedef struct st_pessoa {
char nome[100];
int idade;
} pessoa;
Os exemplos acima são válidos e funcionam igualmente. Abaixo, um exemplo completo com definição e manipulação de uma estrutura:
#include <stdio.h>
#include <strings.h>
typedef char string[128];
typedef int inteiro;
typedef float real;
typedef struct st_pessoa {
string nome;
string telefone;
inteiro idade;
real altura;
} pessoa;
int main() {
pessoa p;
printf( "Informe o nome: " );
scanf( "%s", p.nome );
printf( "Informe o telefone: " );
scanf( "%s", p.telefone );
printf( "Informe a idade: " );
scanf( "%d", &p.idade );
printf( "Informe a altura: " );
scanf( "%f", &p.altura );
printf( "\nO nome eh......: %s", p.nome );
printf( "\nO telefone eh..: %s", p.telefone );
printf( "\nA idade eh.....: %d", p.idade );
printf( "\nA altura eh....: %.2f", p.altura );
return 0;
}
No exemplo acima, são declarados os tipos inteiro, real e string, além do tipo pessoa que é uma estrutura. Repare que no programa principal a declaração da estrutura de pessoas não necessita ser precedido da palavra reservada struct. Essa é a vantágem de declarar estruturas com typedef.