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: " );
    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.