Aula 18: Estruturas |
Os três arquivos armazenando coisas
|
O arquivo do centro é usado para
|
Uma estrutura é um conjunto de variáveis de tipos distintos. |
|
Cada variável dentro de uma estrutura é chamada campo. Na figura ao lado temos 5 campos: um int (b), um float (f), um char (c), um array unidimensional de floats (r) e um array de duas dimensões de doubles (m). |
Para declarar uma estrutura fazemos o seguinte:
struct {
tipo1 item1; tipo2 item2; | tipoN itemN; } nome; |
Por exemplo, a definição de uma estrutura contendo a informação de um estudante pode ter campos para o nome, ano, e propinas pagas:
struct {
char name[20]; int year; int propinas; } student; |
nome.campo |
Por exemplo, para atribuir valores à estrutura estudante podemos fazer o seguinte:
strcpy(student.name, "Peter Stallinga");
student.year = 2002;
student.propinas = 1;
para recordar o funcionamento da função strcpy,
ver a aula sobre strings.
Outro exemplo:
struct {
float x;
float y;
} coordinate;
coordinate.x = 1.0;
coordinate.y = 0.0;
Isto não é propriamente um conjunto de variáveis de diferentes tipos, portanto também podíamos utilizar um array:
float coordinate[2];
coordinate[0] = 1.0;
coordinate[1] = 0.0;
mas, a primeira versão, com a estrutura, é mais lógica.
Ainda outro exemplo:
struct {
char rua[20];
int numero;
int andar;
char porta;
} address;
strcpy(address.rua, "Rua Santo Antonio");
address.numero = 34;
address.andar = 3;
address.porta = 'E';
printf("%s %d", address.rua, address.numero);
printf("%d %c", address.andar, address.porta);
Rua Santo Antonio 34
3 E
struct {
char name[20]; int year; int propinas; } students[2000]; |
De notar a estrutura de arrays de estruturas.
students
é um array de estruturas, portanto, students[i]
é uma destas estruturas e se queremos atribuir algum valor a um
campo utilizamos o ponto e o nome do campo, assim students[i].year
é um inteiro que contém o ano do estudante número
i.
A sintaxe students.year[i] estaria
errada (podíamos utilizar desta forma se tivéssemos uma única
estrutura students contendo um campo
year
que fosse um array)
Igualmente errado seria: students.[i]year,
que não faz qualquer sentido. Cuidado com o sítio onde se
colocam os pontos.
Mais tarde iremos ver que podemos facilmente declarar variáveis do tipo array de estruturas (ver aula 19).