Estruturas em C
Estruturas em C
Uma estrutura em C é um uma estrutura de dados em forma de um registro com vários campos.
- Criação de uma estrutura
- Para a criação de uma estrutura utiliza-se o comando struct e atribui-se um nome para a estrutura, o qual é depois utilizado para declarar variáveis deste tipo.
Exemplo[1]:
struct nametype{
char first[10] ;
char midinit ;
char last[20] ;
};
struct nametyte name;
- A primeira declaração cria uma estrutura de nome nametype com três campos, na qual o primeiro (first) e o terceiro (last) são strings e o segundo (midinit) é um caracter.
- A segunda declaração cria a variável name do tipo da estrutura nametype.
Uma alternativa ao uso de um nome de estrutura é utilizar a definição de tipo com o comando typedef do C e depois utilizar o novo tipo criado para declarar varáveis do tipo da estrutura criada. Por exemplo:
typedef struct {
char first[10] ;
char midinit ;
char last[20] ;
} NAMETYPE;
NAMETYTE name;
- Observe que os nomes de estruturas são convencionalmente escritos com letras minúsculas, mas os especificadores de typedef são escritos com letras maiúsculas ao apresentar programas em C.
- Acesso aos campos da estrutura
- Cada campo da estrutura pode ser acessado especificando o nome da variável e no nome do campo correspondente.
Por exemplo:
printf("%s", name.first);
- pode ser usada para imprimir o primeiro nome na estrutura name, e a instrução:
name.midinit = 'M';
- atribui valor ao segundo campo da estrutura name.
- Programa exemplo
#include <stdio.h>
#include <string.h>
struct nametype{
char first [10]; /*Tipo string*/
char midinit; /*Tipo char*/
char last [10]; /*Tipo string*/
};
void main ()
{
struct nametype name;
strcpy (name.first,"João");
name.midinit = 'C';
strcpy (name.last,"Silva");
printf("Nome completo: %s %c. %s\n", name.first, name.midinit, name.last);
}
Exercícios
- Construa um programa para receber pelo teclado o nome, data de nascimento, telefone e email de uma pessoa e armazenar os valores em uma variável tipo estrutura, chamada ficha_pessoal. Em seguida imprimir as informações da pessoa.
- Modifique o programa anterior, fazendo com que o campo telefone da estrutura ficha_pessoal seja também uma estrutura, chamada telefones, com campos para telefones residencial, comercial e celular.
- Modifique o programa, atribuindo a definição da estrutura ficha_pessoal a uma variável tipo vetor, de forma a receber dados de 10 pessoas diferentes.
Ver: Curso C -> Tipo de dados definidos pelo usuário -> Estruturas
Estruturas e passagem de argumentos para funções
Uma estrutura pode ser passada como argumento para uma função. Para isto, na declaração da função, deve-se declarar o parâmetro como uma variável tipo estrutura.
Por exemplo, poderia definir uma função do tipo ImprimeFicha para receber um parâmetro do tipo estrutura[2]:
void ImprimeFicha (struct ficha_pessoal ficha)
{
...
}
Neste exemplo uma estrutura é passada como argumento por valor para a função, sendo copiado para o parâmetro da função chamada.
Se quisermos modificar a estrutura do programa principal, podemos utilizar ponteiros.
Estruturas e ponteiros
Podemos ter um ponteiro para uma estrutura.
Veja um exemplo de declaração de uma estrutura do tipo ponteiro[3]:
struct ficha_pessoal *p;
Para acessar um campo de uma estrutura tipo ponteiro, devemos usar o comando:
p->nome;
Assim, podemos utilizar um ponteiro para passar um argumento por referência para uma função.
Por exemplo, suponha que tivéssemos definida uma função PreencheFicha, usada para preencher uma variável tipo estrutura. Neste caso, poderíamos chamá-la passando como argumento um ponteiro:
PreecheFicha(&ficha);
Exercícios
- Construa funções as funções PreecheFicha e ImprimeFicha para o exercício 2 anterior.
- Use as funções PreecheFicha e ImprimeFicha no exercício 3 anterior, passando como argumento para acessar um campo do vetor um ponteiro:
*(vetor + i)
Referências
- ↑ TENENBAUM, A. A.; LANGSAM, Y.; AUGENSTEIN, M.J. Estruturas de dados usando C, São Paulo: Makron Books, 1995.
- ↑ Curso C, UFMG. http://www.mtm.ufsc.br/~azeredo/cursoC/c.html
- ↑ Curso C, UFMG. http://www.mtm.ufsc.br/~azeredo/cursoC/c.html
--Evandro.cantu (discussão) 10h29min de 12 de junho de 2014 (BRT)