c para javaneses

9
C para Javaneses Novembro 2003 Elmar Melcher UFCG [email protected]

Upload: taniel

Post on 18-Jan-2016

15 views

Category:

Documents


0 download

DESCRIPTION

C para Javaneses. Novembro 2003. Elmar Melcher UFCG [email protected]. C = f(Java). C = Java – OO + ponteiros Resumido: Métodos são dissociados dos dados. Todos os métodos são definidos globalmente. Struct é uma classe somente com atributos públicos (sem métodos, sem privacidade). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: C para Javaneses

C para Javaneses

Novembro 2003

Elmar [email protected]

Page 2: C para Javaneses

C = f(Java)

C = Java – OO + ponteiros

Resumido:• Métodos são dissociados dos dados.• Todos os métodos são definidos

globalmente.• Struct é uma classe somente com atributos

públicos (sem métodos, sem privacidade).• Um ponteiro é o endereço de um objeto na

memória.• Um ponteiro “sabe” o tamanho do objeto.

Page 3: C para Javaneses

Estruturas e ponteiros

• Veja agora as transaprências de Jacobi.• Depois volte para ‘ca.

Page 4: C para Javaneses

Uma struct pode conter outra

struct coisa_str {int fofa;int dura;

} coisa;

struct alguma_str {int mole;struct coisa_str coisa;

} alguma;

void test() { alguma.coisa.fofa = 55;}

Page 5: C para Javaneses

Uma struct pode conter um vetor de outras

struct coisa_str {int fofa;int dura;

} coisas[10];

struct alguma_str {int mole;struct coisa_str *ncoisa;

} alguma;

void test() { alguma.ncoisas = coisas; alguma.ncoisas[5].fofa = 55;}

Page 6: C para Javaneses

Um apontador para uma função

typedef int (*func_ptr)();

int rotina(int a) { return(a+5);}

void test() { func_ptr exec = &rotina; x = (*exec)(50); // agora x comtém 55}

Page 7: C para Javaneses

Estruturas de bits

struct selector {pl:2; // 2 bits menos signficativosldt:1; // 1 bitsindex:13; // 13 bits mais signficativos

} sel;

unsigned short s; // 16 bits

void test() { sel.pl = 3; sel.ldt = 0; sel.index = 0x200; s = * (unsigned short *) &sel;}

Ponteiro sobre struct selector

Convertido em Ponteiro sobre unsigned short

dereferenciado

Page 8: C para Javaneses

Union

• Armazena objetos diferentes no mesmo lugar

union coisa_uni {int fofa;int dura;

} coisa;

void test() { coisas.fofa = 55; // agora coisa.dura é 55 também !}

Page 9: C para Javaneses

Union – outro exemplo

struct gate_str {unsigned int offset;unsigned short selector;unsigned short params;

};

struct segment_str {unsigned int base;unsigned int limit;

}; struct dt_str { word length; union { struct gate_str *g; struct segment_str *s; } base;} gdt;

… gdt.base.s[200].limit = 500;