Академический Документы
Профессиональный Документы
Культура Документы
Objetivos do mdulo:
- Definir estruturas;
- Definir unies;
Contedos do mdulo:
Definio
Em C possvel que o programador defina os seus prprios tipos de dados combinando outros tipos de
dados bsicos numa s estrutura.
Por exemplo, considere um programa para gerir dados de alunos em que, para cada aluno, pretendemos
armazenar a seguinte informao:
At agora a soluo passava por criar um vetor para cada elemento a armazenar ou, na melhor das
hipteses, combinar os elementos de acordo com o seu tipo de dados.
As estruturas permitem combinar estes campos agrupando-os num s tipo de dados, assim:
Assim temos um novo tipo de dados denominado struct aluno com vrios campos.
Sendo um novo tipo de dados podemos declarar uma varivel desse mesmo tipo de dados assim:
struct aluno x;
A varivel x composta por vrios campos que so referenciados utilizando o operador . (ponto final) logo a seguir
varivel para indicar qual o campo a referir.
printf(Introduza o nome:);
gets(x.nome);
Quando definimos o tipo de dados podemos, tambm, criar variveis com base nesse mesmo tipo de dados basta
adicionar o nome das variveis entre a } (chaveta a fechar) e o ; (ponto e vrgula) na declarao da estrutura;
struct aluno{
char nome[50];
char morada[100];
char cp[9];
char telefone[10];
char email[100];
char data_nascimento[9];
} var1,var2;
Quando s precisamos de uma varivel da estrutura podemos omitir o nome da estrutura e s indicar o da varivel.
A definio da estrutura pode estar dentro de uma funo mas as boas prticas indicam que devem estar fora e no
inicio do cdigo, logo a seguir aos #include e #define.
Uma maneira de simplificar o cdigo passa por utilizar a instruo typedef em conjunto com a struct para criar um
tipo de dados que permite definir as variveis sem utilizar a palavra struct, assim:
typedef struct{
char nome[50];
char morada[100];
char cp[9];
char telefone[10];
char email[100];
char data_nascimento[9];
} aluno;
Inicializao
Tal como nos restantes tipos de dados podemos inicializar as variveis definidas com base numa estrutura quando as
declaramos.
typedef struct{
int x,y;
}ponto;
ponto p={1,2};
typedef struct{
int x,y;
}ponto;
ponto p;
p.x=1;
p.y=2;
ponto p,q;
p.x=1;
p.y=2;
q=p;
Ateno que no possvel utilizar o operador == (igual) entre duas variveis declaradas com base em estruturas, a
igualdade tem de ser avaliada campo a campo.
Passagem a funes
Tal como as restantes variveis tambm podemos passar uma varivel criada com base numa estrutura para uma
funo. As regras so as mesmas quanto passagem por valor ou por referncia.
Alm de passar uma estrutura completa podemos passar somente um elemento da estrutura do seguinte modo:
func(p.x);
Quando passamos s um elemento a funo deve ter um parmetro com o tipo de dados que coincida com o tipo de
dados do elemento passado.
A passagem da estrutura inteira para dentro de uma funo implica que a estrutura seja definida globalmente.
Vetores de estruturas
typedef struct{
int x,y;
}ponto;
ponto pontos[10];
Com um vetor passamos a ter de indicar no s o campo da estrutura mas tambm o ndice dentro do vetor:
typedef struct{
int x,y;
}ponto;
ponto pontos[10];
printf(%d - %d\n,pontos[2].x,pontos[2].y);