Italo Info


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: " ); gets( p.nome ); printf( "Informe o telefone: " ); gets( 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 de, 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.