23
Estruturas, Enumerações, Uniões Tipos de Dados Compostos

Tipos de Dados Compostos - DEINF/UFMAgeraldo/lpnovo/13.tipos_compostos.pdf · Em aulas anteriores dissemos que os TIPOS de DADO podem ser classificados em: ... 9. int sub_items_visible;

Embed Size (px)

Citation preview

Estruturas, Enumerações, Uniões

Tipos de Dados Compostos

Tipo de Dados Em aulas anteriores dissemos que os TIPOS

de DADO podem ser classificados em:

básicos ou primitivos

compostos ou construídos

2

Tipos Compostos Arranjos (matrizes e vetores)

Ponteiros

Definidos pelo usuário

Estruturas

Uniões

Enumerações

Campos de bits

typedefs

3

Estruturas

4

Estruturas

5

Estruturas

6

Estruturas

7

Exemplos - Estrutura 1. struct ponto { /*declaração de estrutura*/ 2. int coord_x; /*coordenadas*/ 3. int coord_y; 4. };

5. int main() { 6. struct ponto P; /*P é uma variável do tipo

Ponto */ 7. p.coord_x = 1; /*atribuição de valores*/ 8. p.coord_y = 5; 9. }

8

Exemplo - Estrutura 1. struct ponto { /*declaração de estrutura*/ 2. int coord_x; /*coordenadas*/ 3. int coord_y; 4. };

5. struct linha { /*definição de uma linha */ 6. struct ponto p0; /*ponto inicial da linha */ 7. struct ponto pn; /*ponto final da linha*/ 8. }; 9. ...... 10. struct linha L1; /*exemplo de atribuição*/ 11. L1.p0.coord_x = 5; 12. L1.p0.coord_y = 6;

9

Uniões

10

União Exemplo 1. #define ENTER 13 2. #define ESC 27 3. #define RTARR 77 4. #define LTARR 75 5. #define UPARR 72 6. #define DWARR 80

7. union u_type{ 8. int i; 9. char ch; 10. } ich;

11. void loopMenu() {

12. while ( 1 ) { 13. 14. ich.i = getch(); 15. switch ( ich.ch ) { 16. case ENTER: 17. ....

11

Enumerações Uma enumeração é uma extensão da

linguagem C acrescentada pelo padrão ANSI.

Uma enumeração é uma declaração de um novo tipo de dados que consiste em um conjunto de constantes inteiras que especficam todos os valores legais que uma variável desse tipo pode ter.

Enumerações são definidas de forma semelhante a estruturas; no entanto, utiliza-se a palavra-chave enum para assinalar o início de um tipo de enumeração.

12

Forma Geral enum identificador {

Simbolo_1,

Simbolo_2,

...

Simbolo_n

} var_1, var_2, ..., var_n;

13

Valores Em uma enumaração cada Simbolo_i

representa um valor inteiro.

Cada símbolo recebe um valor maior em uma unidade do precedente.

Por default, o valor do primeiro símbolo é 0.

No entanto, você pode especificar o valor de um ou mais símbolos usando um inicializador.

O símbolos que aparecem após os inicializadores recebem valores maiores que o da inicialização precedente.

14

Enumeração - Exemplos 1. enum dt_wday { 2. Sunday , 3. Monday , 4. Tuesday , 5. Wednsday , 6. Thursday , 7. Friday , 8. Saturday 9. };

15

Enumeração - Exemplos 1. enum dt_month{ 2. January = 1 , 3. February , 4. Mars , 5. April , 6. May , 7. June , 8. July , 9. August , 10. September , 11. October , 12. November , 13. December 14. };

16

Enumeração - Exemplos 1. #include <stdio.h>

2. enum coin { 3. penny, 4. nickel, 5. dime, 6. quarter=100, 7. hal_dollar, 8. dollar 9. };

10. int main () { 11. enum coin money; 12. money = dollar;

13. switch (money) { 14. case penny: printf ("penny"); break; 15. case nickel: printf ("nickel"); break; 16. case dollar: printf ("dollar"); break; 17. } 18. }

17

Campos de Bits

18

Campos de Bits

19

Campos de Bits - Exemplo 1. struct {

unsigned mday : 5;

unsigned month: 4;

unsigned year :22;

unsigned isBCE: 1;

} bitf;

20

Typedef

21

Exemplo – menu.h 1. #ifndef MENU_H 2. #define MENU_H

3. typedef struct item { 4. char * str; 5. void(* fun)(void); 6. struct item * sub; 7. struct item * sup; 8. struct item * nxt; 9. struct item * prv; 10. } Item;

11. void addMenuItem (const char * str, void(* fun)(void)); 12. void addMenuSubItem (const char * str_i,const char *

str_si, void(* fun)(void)); 13. void loopMenu(void);

14. #endif

22

Exemplo – menu.c 1. /** menu.c */

2. #include <stdlib.h> 3. #include <stdio.h> 4. #include <conio.h> 5. #include "buffer.h" 6. #include "menu.h"

7. Item * menu; 8. Item * menu_sel; 9. int sub_items_visible;

10. ...

23