5
1 Tipos avançados Tipos avançados Em C existe a possibilidade de criar novos Em C existe a possibilidade de criar novos tipos. Em C esta possibilidade só pode ser tipos. Em C esta possibilidade só pode ser materializada com materializada com estruturas estruturas struct nome{ struct nome{ type obj type obj 1 ; ; type obj type obj 2 ; ; ... ... } optional_decl; } optional_decl; Nestes objectos todos os elementos são de Nestes objectos todos os elementos são de acesso público. Cada elemento pode ser acesso público. Cada elemento pode ser acedido na forma acedido na forma nome.obj nome.obj i . .

1 Tipos avançados Em C existe a possibilidade de criar novos tipos. Em C esta possibilidade só pode ser materializada com estruturas struct nome{ type

Embed Size (px)

Citation preview

Page 1: 1 Tipos avançados Em C existe a possibilidade de criar novos tipos. Em C esta possibilidade só pode ser materializada com estruturas struct nome{ type

11

Tipos avançadosTipos avançados

Em C existe a possibilidade de criar Em C existe a possibilidade de criar novos tipos. Em C esta possibilidade só novos tipos. Em C esta possibilidade só pode ser materializada com pode ser materializada com estruturasestruturas struct nome{struct nome{

type objtype obj11;;

type objtype obj22;;

......} optional_decl;} optional_decl;Nestes objectos todos os elementos são de Nestes objectos todos os elementos são de acesso público. Cada elemento pode ser acesso público. Cada elemento pode ser acedido na forma acedido na forma nome.objnome.objii..

Page 2: 1 Tipos avançados Em C existe a possibilidade de criar novos tipos. Em C esta possibilidade só pode ser materializada com estruturas struct nome{ type

22

Tipos avançadosTipos avançados

A declaração de objectos com essa estrutura faz-se A declaração de objectos com essa estrutura faz-se com com struct nome outro_nome, ainda_outro,...;struct nome outro_nome, ainda_outro,...;e a inicialização pode ser feita nos mesmos moldes do e a inicialização pode ser feita nos mesmos moldes do que acontece para as variáveis dimensionadas.que acontece para as variáveis dimensionadas.Para evitar a escrita de struct em cada declaração usa-Para evitar a escrita de struct em cada declaração usa-se frequentemente se frequentemente typedeftypedef::

typedef char byte;typedef char byte;typedef struct particula elementar;typedef struct particula elementar;

podendo depois escrever-sepodendo depois escrever-seelementar quark, leptao;elementar quark, leptao;

Page 3: 1 Tipos avançados Em C existe a possibilidade de criar novos tipos. Em C esta possibilidade só pode ser materializada com estruturas struct nome{ type

33

Tipos avançadosTipos avançados

Estruturas podem ser acedidas por ponteirosEstruturas podem ser acedidas por ponteiros

struct nome *ponteiro_para_nome;struct nome *ponteiro_para_nome;

algo que é essencial para permitir uma algo que é essencial para permitir uma passagem rápida de estruturas para dentro de passagem rápida de estruturas para dentro de funções. Como operações do tipofunções. Como operações do tipo

(*ponteiro_para_nome).obj(*ponteiro_para_nome).obj ii

é muito frequente optou-se por definir um novo é muito frequente optou-se por definir um novo operadoroperador(*ponteiro_para_nome).obj(*ponteiro_para_nome).obj ii ponteiro_para_nome->obj ponteiro_para_nome->obj11

Page 4: 1 Tipos avançados Em C existe a possibilidade de criar novos tipos. Em C esta possibilidade só pode ser materializada com estruturas struct nome{ type

44

Tipos avançadosTipos avançados

O conceito de estrutura associado à O conceito de estrutura associado à possibilidade de tipos incompletos possibilidade de tipos incompletos permite a criação de listas que se permite a criação de listas que se adaptam ao tamanho requerido.adaptam ao tamanho requerido.

Isso passa por fazerIsso passa por fazer

struct nome{struct nome{

struct nome *next;struct nome *next;......

};};

NULL NULL NULL

Page 5: 1 Tipos avançados Em C existe a possibilidade de criar novos tipos. Em C esta possibilidade só pode ser materializada com estruturas struct nome{ type

55

Tipos avançadosTipos avançados

Exemplos:Exemplos:

Criação de bibliotecas:Criação de bibliotecas:

Estática: Dinâmica:Estática: Dinâmica: