Estruturas na Linguagem C

Estruturas em C são coleções de valores denominados variáveis membros. Cada membro pode ter um tipo distinto, permitindo a composição de objetos complexos a partir de tipos internos como char, short, int, long long, float e double.

Para representar entidades como pessoas (com nome, telefone, sexo e altura) ou livros (com título, autor, preço e ISBN), utiliza-se estruturas.

Definição e Sintaxe:

struct nome_etiqueta
{
    declarações de membros
} variáveis_opcionais;

Exemplo de declaração:

struct Pessoa
{
    char nome_completo[25];
    char contato_telefonico[14];
    char genero[6];
    int estatura_cm;
} individuo1, individuo2;  // Variáveis globais, prática desaconselhada

Criação de Instâncias:

struct Pessoa  // Definição do tipo estrutura (modelo)
{
    char nome_completo[25];
    char contato_telefonico[14];
    char genero[6];
    int estatura_cm;
};

int main()
{
    struct Pessoa individuo1 = { 0 };  // Instanciação com alocação de memória
    return 0;
}

Tipos de Membros:

Membros podem ser escalares, arrays, ponteiros ou outras estruturas.

struct Pessoa
{
    char nome_completo[25];
    char contato_telefonico[14];
    char genero[6];
    int estatura_cm;
};

struct Estudante
{
    struct Pessoa dados_pessoais;
    int matricula;
    float media_notas;
};

Inicialização:

struct Pessoa
{
    char nome_completo[25];
    char contato_telefonico[14];
    char genero[6];
    int estatura_cm;
};

struct Estudante
{
    struct Pessoa dados_pessoais;
    int matricula;
    float media_notas;
};

int main()
{
    struct Pessoa individuo1 = { "Ana Silva", "991234567", "Feminino", 165 };
    struct Estudante aluno1 = { {"Carlos Souza", "988765432", "Masculino", 178}, 1001, 7.8f};
    return 0;
}

Exibição de Dados:

printf("Nome: %s, Telefone: %s, Gênero: %s, Altura: %d cm\n", 
       individuo1.nome_completo, individuo1.contato_telefonico, 
       individuo1.genero, individuo1.estatura_cm);
printf("Nome: %s, Telefone: %s, Gênero: %s, Altura: %d cm, Matrícula: %d, Média: %.2f\n",
       aluno1.dados_pessoais.nome_completo, aluno1.dados_pessoais.contato_telefonico,
       aluno1.dados_pessoais.genero, aluno1.dados_pessoais.estatura_cm,
       aluno1.matricula, aluno1.media_notas);

Acesso aos Membros:

Utiliza-se o operador ponto (.) para variáveis e seta (->) para ponteiros.

struct Pessoa
{
    char nome_completo[25];
    char contato_telefonico[14];
    char genero[6];
    int estatura_cm;
};

void exibir_dados_var(struct Pessoa p)
{
    printf("Nome: %s, Telefone: %s, Gênero: %s, Altura: %d cm\n",
           p.nome_completo, p.contato_telefonico, p.genero, p.estatura_cm);
}

void exibir_dados_ptr(struct Pessoa* p_ptr)
{
    printf("Nome: %s, Telefone: %s, Gênero: %s, Altura: %d cm\n",
           p_ptr->nome_completo, p_ptr->contato_telefonico, 
           p_ptr->genero, p_ptr->estatura_cm);
}

int main()
{
    struct Pessoa individuo1 = { "Maria Oliveira", "912345678", "Feminino", 172 };
    exibir_dados_var(individuo1);
    exibir_dados_ptr(&individuo1);
    return 0;
}

Passagem como Parâmetro:

Entre as funções exibir_dados_var e exibir_dados_ptr, a segunda é preferível. Quando se passa uma estrutura inteira por valor, cópias são feitas, o que pode gerar sobercarga significativa para estruturas grandes. Portanto, recomenda-se passar ponteiros para estruturas como argumentos em funções.

Tags: C Language struct variables pointers function parameters

Publicado em 7-4 01:24