106
03/05/2011 08:58 Copyright @ Arnaldo V. Moura, Daniel F. Ferber 1 Curso de C Estruturas: Structs e Unions

Curso de Cwainer/cursos/2s2011/Cap11... · 2011. 8. 2. · int codigo_curso;} aluno; Lista de atributos Criar variável (reserva memória) char nome [20] int registro_academico int

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

  • 03/05/2011 08:58 Copyright @ Arnaldo V. Moura, Daniel F. Ferber 1

    Curso de C

    Estruturas: Structs e Unions

  • 2

    Curso C - IC/UNICAMP

    Estruturas

    • O que são estruturas compostas

    • Declaração

    • Atributos

    Roteiro:

    >

  • 03/05/2011 08:58 3

    Structs

  • 4

    Curso C - IC/UNICAMP

    • Agrupar variáveis inter-relacionadas

    • Organizar dados complexos

    • Reduzir número de variáveis

    • Usar um único nome de variável

    • Agrupar variáveis inter-relacionadas

    • Organizar dados complexos

    • Reduzir número de variáveis

    • Usar um único nome de variável

    Structs

    Motivação:

    >

  • 5

    Curso C - IC/UNICAMP

    • Agrupar variáveis inter-relacionadas

    • Organizar dados complexos

    • Reduzir número de variáveis

    • Usar um único nome de variável

    • Agrupar variáveis inter-relacionadas

    • Organizar dados complexos

    • Reduzir número de variáveis

    • Usar um único nome de variável

    Structs

    Motivação:

    char nome[20]

    int registro_academico

    int codigo_curso

    char nome[20]

    int registro_academico

    int codigo_curso

    >

  • 03/05/2011 08:58 6

    Structs

    Declaração

  • 7

    Curso C - IC/UNICAMP

    Structs: declaração

    Sintaxe:

    struct {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variavel;

    >

  • 8

    Curso C - IC/UNICAMP

    Structs: declaração

    Sintaxe:

    struct {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variavel;

    Tipo Estrutura

    Lista de

    atributos

    Aloca e cria variável

    >

  • 9

    Curso C - IC/UNICAMP

    Structs: declaração

    Sintaxe:

    struct {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variavel;

    Tipo Estrutura

    Lista de

    atributos

    Aloca e cria variável• Declara estrutura • Cria apenas a variável• Só para esta declaração

    • Declara estrutura • Cria apenas a variável• Só para esta declaração

    >

  • 10

    Curso C - IC/UNICAMP

    Structs

    Exemplo 1:

    struct {char nome[20];int registro_academico; int codigo_curso;

    } aluno;

    struct {char nome[20];int registro_academico; int codigo_curso;

    } aluno;

    >

  • 11

    Curso C - IC/UNICAMP

    Structs

    Exemplo 1:

    struct {char nome[20];int registro_academico; int codigo_curso;

    } aluno;

    struct {char nome[20];int registro_academico; int codigo_curso;

    } aluno;

    Lista de

    atributos

    Criar variável

    (reserva memória)char nome[20]

    int registro_academico

    int codigo_curso

    char nome[20]

    int registro_academico

    int codigo_curso

    Tipo Estrutura

    >

  • 12

    Curso C - IC/UNICAMP

    Structs

    Exemplo 2:

    struct {char nome[20];float salario;int codigo_cargo;

    } funcionario;

    Lista de

    atributos

    Cria variávelchar nome[20]

    float salario

    int codigo_cargo

    char nome[20]

    float salario

    int codigo_cargo

    Tipo Estrutura

    >

  • 03/05/2011 08:58 13

    Structs

    Uso dos atributos

  • 14

    Curso C - IC/UNICAMP

    Structs: atributos

    Acesso a atributos:

    funcionario.salarioAcesso:

  • 15

    Curso C - IC/UNICAMP

    Structs: atributos

    Acesso a atributos:

    funcionario.salario = 1000.0f;Atribuição:

    funcionario.salarioAcesso:

  • 16

    Curso C - IC/UNICAMP

    Structs: atributos

    Acesso a atributos:

    printf(“A variável: %s”, funcionario.nome);Impressão:

    funcionario.salario = 1000.0f;Atribuição:

    funcionario.salarioAcesso:

  • 17

    Curso C - IC/UNICAMP

    Structs: atributos

    Acesso a atributos:

    printf(“A variável: %s”, funcionario.nome);Impressão:

    funcionario.salario = 1000.0f;Atribuição:

    scanf(“%f”, &funcionario.salario);Leitura:

    funcionario.salarioAcesso:

    >

  • 18

    Curso C - IC/UNICAMP

    Structs: atributos

    Acesso a atributos:

    printf(“A variável: %s”, funcionario.nome);Impressão:

    funcionario.salario = 1000.0f;Atribuição:

    scanf(“%f”, &funcionario.salario);Leitura:

    funcionario.salarioAcesso:

    funcionarioA = funcionarioB;Cópia:

    >

  • 19

    Curso C - IC/UNICAMP

    Structs: atributos

    Operador de seleção de atributo:

    .

    Nome

    atributo

    (ref. memória)(ref. memória)

    variável .

    Nome

    atributo

    (ref. memória)(ref. memória)

    variável

    >

  • 20

    Curso C - IC/UNICAMP

    Structs: atributos

    Operador de seleção de atributo:

    .

    Nome

    atributo

    (ref. memória)(ref. memória)

    variável .

    Nome

    atributo

    (ref. memória)(ref. memória)

    variável

    funcionario.salario = 1000.0f;

    funcionarioref.

    memória

    salario

    .ref.

    memória

    =

    1000.0

    >

  • 03/05/2011 08:58 21

    Structs

    Declaração com definição de tipo

  • 22

    Curso C - IC/UNICAMP

    Structs: definição de tipo

    Declaração identificada:

    struct nome_estrutura {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variavel;

    >

  • 23

    Curso C - IC/UNICAMP

    Structs: definição de tipo

    Declaração identificada:

    struct nome_estrutura {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variavel;

    Tipo Estrutura

    Lista de

    atributos

    Aloca e cria variável

    >

  • 24

    Curso C - IC/UNICAMP

    Structs: definição de tipo

    Declaração identificada:

    struct nome_estrutura {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variavel;

    Tipo Estrutura

    Lista de

    atributos

    Aloca e cria variável

    Nome da

    Estrutura

    >

    • Declara estrutura• Memoriza a declaração• Novo tipo de dados• CRIA a variável

    • Declara estrutura• Memoriza a declaração• Novo tipo de dados• CRIA a variável

  • 25

    Curso C - IC/UNICAMP

    Structs: definição de tipo

    Declaração identificada:

    struct nome_estrutura {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    };

    Tipo Estrutura

    Lista de

    atributos

    Não aloca nada

    Nome da

    Estrutura

    • Declara estrutura• Memoriza a declaração• Novo tipo de dados• NÃO cria a variável

    • Declara estrutura• Memoriza a declaração• Novo tipo de dados• NÃO cria a variável

    >

  • 26

    Curso C - IC/UNICAMP

    Structs: definição de tipo

    Declaração identificada:

    struct nome_estrutura {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    };

    Declaração

    memorizada

    pelo compilador

    >

  • 27

    Curso C - IC/UNICAMP

    Structs: definição de tipo

    Declaração identificada:

    struct nome_estrutura {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    };

    struct nome_estrutura variavel

    Declaração

    memorizada

    pelo compilador

    Declaração abreviada de variável:

    >

  • 28

    Curso C - IC/UNICAMP

    Structs: definição de tipo

    int main(int argc, char *argv[]) {struct TipoAluno {

    char sobrenome[50];int registro_academico;int codigo_curso;

    };

    struct TipoAluno aluno1;struct TipoAluno aluno2;struct TipoAluno aluno_selecionado;

    ...

    int main(int argc, char *argv[]) {struct TipoAluno {

    char sobrenome[50];int registro_academico;int codigo_curso;

    };

    struct TipoAluno aluno1 ;struct TipoAluno aluno2 ;struct TipoAluno aluno_selecionado ;

    ...

    Declarar e criar variáveis:

    >

  • 29

    Curso C - IC/UNICAMP

    printf("Aluno 1: ");scanf("%s", aluno1.sobrenome);scanf("%d", &aluno1.registro_academico);scanf("%d", &aluno1.codigo_curso);

    printf("Aluno 2: ");scanf("%s", aluno2.sobrenome);scanf("%d", &aluno2.registro_academico);scanf("%d", &aluno2.codigo_curso);...

    printf("Aluno 1: ");scanf("%s", aluno1.sobrenome );scanf("%d", & aluno1.registro_academico );scanf("%d", & aluno1.codigo_curso );

    printf("Aluno 2: ");scanf("%s", aluno2.sobrenome );scanf("%d", & aluno2.registro_academico );scanf("%d", & aluno2.codigo_curso );...

    Structs: definição de tipo

    Ler atributos:

    >

  • 30

    Curso C - IC/UNICAMP

    if (aluno1.registro_academico <aluno2.registro_academico) {

    aluno_selecionado = aluno1;} else {

    aluno_selecionado = aluno2;}

    if ( aluno1.registro_academico <aluno2.registro_academico ) {

    aluno_selecionado = aluno1 ;} else {

    aluno_selecionado = aluno2 ;}

    Structs: definição de tipo

    Comparar atributos:

    >

  • 31

    Curso C - IC/UNICAMP

    printf("Sobrenome: %s \n",aluno_selecionado.sobrenome);

    printf("RA: %d \n",aluno_selecionado.registro_academico);

    printf("Curso: %d \n",aluno_selecionado.codigo_curso);

    return 0;}

    printf("Sobrenome: %s \n",aluno_selecionado.sobrenome );

    printf("RA: %d \n",aluno_selecionado.registro_academico );

    printf("Curso: %d \n",aluno_selecionado.codigo_curso );

    return 0;}

    Structs: definição de tipo

    Imprimir resultado:

    >

  • 03/05/2011 08:58 32

    Structs

    Declarações aninhadas

  • 33

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Organizando o código:

    struct {char nome[50];int codigo_curso;int dia_matricula;int mes_matricula;int ano_matricula;...

    } aluno;

    >

  • 34

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Organizando o código:

    struct {char nome[50];int codigo_curso;int dia_matricula;int mes_matricula;int ano_matricula;...

    } aluno;

    struct {char nome[50];int codigo_curso;struct {

    int dia,mes,ano;} data_matricula;...

    } aluno;

    >

  • 35

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Organizando o código:

    struct {char nome[50];int codigo_curso;int dia_matricula;int mes_matricula;int ano_matricula;...

    } aluno;

    struct {char nome[50];int codigo_curso;struct {

    int dia,mes,ano;} data_matricula;...

    } aluno;

    aluno.data_matricula.dia = 2;aluno.data_matricula.mes = 3;aluno.data_matricula.ano = 1999;

    >

  • 36

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Reaproveitando estruturas:

    struct TipoAluno {char nome[50];int codigo_curso;int dia_matricula;int mes_matricula;int ano_matricula;...

    };

    >

  • 37

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Reaproveitando estruturas:

    struct TipoAluno {char nome[50];int codigo_curso;int dia_matricula;int mes_matricula;int ano_matricula;...

    };

    struct TipoData{int dia,mes,ano;

    };

    >

  • 38

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Reaproveitando estruturas:

    struct TipoData{int dia,mes,ano;

    };

    struct TipoAluno {char nome[50];int codigo_curso;struct TipoData data_matricula;...

    };

    >

  • 39

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Reaproveitando estruturas:

    struct TipoData{int dia,mes,ano;

    };

    struct TipoAluno {char nome[50];int codigo_curso;struct TipoData data_matricula;...

    }; aluno.data_matricula.dia = 2;aluno.data_matricula.mes = 3;aluno.data_matricula.ano = 1999;

    >

  • 40

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Reaproveitando estruturas:

    struct TipoData {int dia,mes, ano;

    };

    >

  • 41

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Reaproveitando estruturas:

    struct TipoAluno {char nome[50];struct TipoData data_matricula;...

    };

    struct TipoData {int dia,mes, ano;

    };

    >

  • 42

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Reaproveitando estruturas:

    struct TipoAluno {char nome[50];struct TipoData data_matricula;...

    };

    struct TipoFuncionario {char nome[50];struct TipoData data_contratacao;...

    };

    struct TipoData {int dia,mes, ano;

    };

    >

  • 43

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Erro: declaração cíclica

    struct TipoFuncionario {char nome[50];int codigo_cargo;struct TipoData data_contratacao;...struct TipoFuncionario supervisor;

    };

    >

  • 44

    Curso C - IC/UNICAMP

    Structs: aninhamento

    Erro: declaração cíclica

    struct TipoFuncionario {char nome[50];int codigo_cargo;struct TipoData data_contratacao;...struct TipoFuncionario supervisor;

    };

    Erro: Declaração cíclica!

    >

  • 45

    Curso C - IC/UNICAMP

    • Coleção de variáveis

    • Tipos diferentes

    • Declaração com um único nome

    • Operação simultânea sobre todos os dados

    • Acesso por atributo

    • Coleção de variáveis

    • Tipos diferentes

    • Declaração com um único nome

    • Operação simultânea sobre todos os dados

    • Acesso por atributo

    Structs

    Conceitos:

    char nome[20]

    int registro_academico

    int codigo_curso

    char nome[20]

    int registro_academico

    int codigo_curso

    >

  • 03/05/2011 08:58 46

    Unions

  • 47

    Curso C - IC/UNICAMP

    • Mesma idéia que de estruturas

    • Economizando memória:– Só um dentre vários valores ocupa a memória

    – Programador é responsável por gerenciar qual valor é

    válido a cada instante

    • Mesma idéia que de estruturas

    • Economizando memória:– Só um dentre vários valores ocupa a memória

    – Programador é responsável por gerenciar qual valor é

    válido a cada instante

    Unions

    Motivação:

    >

  • 48

    Curso C - IC/UNICAMP

    • Mesma idéia que de estruturas

    • Economizando memória:– Só um dentre vários valores ocupa a memória

    – Programador é responsável por gerenciar qual valor é

    válido a cada instante

    • Mesma idéia que de estruturas

    • Economizando memória:– Só um dentre vários valores ocupa a memória

    – Programador é responsável por gerenciar qual valor é

    válido a cada instante

    Unions

    Motivação:

    >

    int cod_curso

  • 49

    Curso C - IC/UNICAMP

    • Mesma idéia que de estruturas

    • Economizando memória:– Só um dentre vários valores ocupa a memória

    – Programador é responsável por gerenciar qual valor é

    válido a cada instante

    • Mesma idéia que de estruturas

    • Economizando memória:– Só um dentre vários valores ocupa a memória

    – Programador é responsável por gerenciar qual valor é

    válido a cada instante

    Unions

    Motivação:

    >

    char nome[20]

  • 50

    Curso C - IC/UNICAMP

    • Mesma idéia que de estruturas

    • Economizando memória:– Só um dentre vários valores ocupa a memória

    – Programador é responsável por gerenciar qual valor é

    válido a cada instante

    • Mesma idéia que de estruturas

    • Economizando memória:– Só um dentre vários valores ocupa a memória

    – Programador é responsável por gerenciar qual valor é

    válido a cada instante

    Unions

    Motivação:

    >

    int reg_academico

  • 03/05/2011 08:58 51

    Unions

    Declaração

  • 52

    Curso C - IC/UNICAMP

    Unions: declaração

    Sintaxe:

    union {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variável;

    >

  • 53

    Curso C - IC/UNICAMP

    Unions: declaração

    Sintaxe:

    union {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variável;

    Tipo União

    Lista de

    atributos

    Aloca e cria variável

    >

  • 54

    Curso C - IC/UNICAMP

    Unions: declaração

    Sintaxe:

    union {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variável;

    Tipo União

    Lista de

    atributos

    Aloca e cria variável• Declara a union• Cria apenas a variável• Só para esta declaração

    • Declara a union• Cria apenas a variável• Só para esta declaração

    >

  • 55

    Curso C - IC/UNICAMP

    Unions: exemplo

    Exemplo:

    union {int inteiro ;float frac ;

    } numflexivel;

    Lista de

    possibilidades

    Cria variável

    Tipo Union

    >

  • 56

    Curso C - IC/UNICAMP

    Unions: exemplo

    Exemplo:

    union {int inteiro ;float frac ;

    } numflexivel;

    Lista de

    possibilidades

    Criar variável

    Tipo Union

    >

    inteironumflexivel

  • 57

    Curso C - IC/UNICAMP

    Unions: exemplo

    Exemplo:

    union {int inteiro ;float frac ;

    } numflexivel;

    Lista de

    possibilidades

    Criar variável

    Tipo Union

    >

    fracnumflexivel

  • 03/05/2011 08:58 58

    Unions

    Atribuindo

  • 59

    Curso C - IC/UNICAMP

    Unions: atribuindo

    union {int inteiro ;float frac ;

    } numflexivel;

    >

    ?????

  • 60

    Curso C - IC/UNICAMP

    Unions: atribuindo

    union {int inteiro ;float frac ;

    } numflexivel;

    >

    ?????

    numflexivel. inteiro = 10;

    10

  • 61

    Curso C - IC/UNICAMP

    Unions: atribuindo

    union {int inteiro ;float frac ;

    } numflexivel;

    >

    ?????

    numflexivel. inteiro = 10;

    10

    numflexivel. frac = 3.1415;

    3.1415

  • 62

    Curso C - IC/UNICAMP

    Unions: atribuindo

    union {int inteiro ;float frac ;

    } numflexivel;

    >

    ?????

    numflexivel. inteiro = 10;

    10

    numflexivel. frac = 3.1415;

    3.1415

    numflexivel. inteiro = -50;

    -50

  • 03/05/2011 08:58 63

    Unions

    Declaração com definição de tipo

  • 64

    Curso C - IC/UNICAMP

    Unions: definição de tipo

    Declaração identificada:

    union nome_union {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variável;

    Tipo Union

    Lista de

    possibilidsades

    Aloca e cria variável

    >

  • 65

    Curso C - IC/UNICAMP

    Unions: definição de tipo

    Declaração identificada:

    union nome_union {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variável;

    Tipo Union

    Lista de

    possibilidsades

    Aloca e cria variável

    Nome da

    Union

    >

  • 66

    Curso C - IC/UNICAMP

    Unions: definição de tipo

    Declaração identificada:

    union nome_union {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    } variável;

    Tipo Union

    Lista de

    possibilidsades

    Aloca e cria variável

    Nome da

    Union

    • Declara a union• Memoriza a declaração• Novo tipo de dados• Cria a variável

    • Declara a union• Memoriza a declaração• Novo tipo de dados• Cria a variável

    >

  • 67

    Curso C - IC/UNICAMP

    Unions: definição de tipo

    Declaração identificada:

    union nome_union {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    };

    Tipo Union

    Lista de

    possibil.

    Não aloca nada

    >

  • 68

    Curso C - IC/UNICAMP

    Unions: definição de tipo

    Declaração identificada:

    union nome_union {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    };

    Tipo Union

    Lista de

    possibil.

    Não aloca nada

    Nome da

    Union

    >

  • 69

    Curso C - IC/UNICAMP

    Unions: definição de tipo

    Declaração identificada:

    union nome_union {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    };

    Tipo Union

    Lista de

    possibil.

    Não aloca nada

    Nome da

    Union

    • Declara a union• Memoriza a declaração• Novo tipo de dados• NÃO cria a variável

    • Declara a union• Memoriza a declaração• Novo tipo de dados• NÃO cria a variável

    >

  • 70

    Curso C - IC/UNICAMP

    Unions: definição de tipo

    Declaração identificada:

    union nome_union {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    };

    Declaração

    memorizada

    pelo compilador

    >

  • 71

    Curso C - IC/UNICAMP

    Unions: definição de tipo

    Declaração identificada:

    union nome_union {tipo1 atributo1;tipo2 atributo2;tipo3 atributo3;...

    };

    union nome_union variável

    Declaração

    memorizada

    pelo compilador

    Declaração abreviada de variável:

    >

  • 72

    Curso C - IC/UNICAMP

    Exemplo

    >

    struct TipoData {int dia;int mes;int ano;

    };

    struct TipoEndereco {char local[50];int numero;char cep[10];

    };

  • 73

    Curso C - IC/UNICAMP

    Exemplo

    struct TipoPessoa {

    char nome[50];

    struct TipoData data_nascimento;

    struct TipoEndereco endereco_residencia;

    union {

    } dados_especificos;

    } pessoa;

    >

  • 74

    Curso C - IC/UNICAMP

    Exemplo

    struct TipoPessoa {

    char nome[50];

    struct TipoData data_nascimento;

    struct TipoEndereco endereco_residencia;

    union {

    struct {

    struct TipoData data_matricula;

    int codigo_curso;

    } aluno;

    } dados_especificos;

    } pessoa;

    >

  • 75

    Curso C - IC/UNICAMP

    Exemplo

    struct TipoPessoa {

    char nome[50];

    struct TipoData data_nascimento;

    struct TipoEndereco endereco_residencia;

    union {

    struct {

    struct TipoData data_matricula;

    int codigo_curso;

    } aluno;

    struct {

    int codigo_contrato;

    struct TipoData data_contratacao;

    int codigo_cargo;

    } funcionario;

    } dados_especificos;

    } pessoa;

    >

  • 76

    Curso C - IC/UNICAMP

    Exemplo

    struct TipoPessoa {

    char nome[50];

    struct TipoData data_nascimento;

    struct TipoEndereco endereco_residencia;

    union {

    struct {

    struct TipoData data_matricula;

    int codigo_curso;

    } aluno;

    struct {

    int codigo_contrato;

    struct TipoData data_contratacao;

    int codigo_cargo;

    } funcionario;

    struct {

    char area_pesquisa[40];

    char nome_departamento[40];

    } professor;

    } dados_especificos;

    } pessoa;

    >

  • 03/05/2011 08:58 77

    Structs e Unions

    Fim do Capítulo

  • 03/05/2011 08:58 78

    Curso de C

    Nomeando Tipos

  • 03/05/2011 08:58 79

    Nomeando Tipos

    Typedef

  • 80

    Curso C - IC/UNICAMP

    Typedef

    Typedef: Definir novos nomes para tipos existentes

    >

  • 81

    Curso C - IC/UNICAMP

    Typedef

    Typedef: Definir novos nomes para tipos existentes

    typedef tipo_original sinonimo;

    Declaração:

    >

  • 82

    Curso C - IC/UNICAMP

    Typedef

    Typedef: Definir novos nomes para tipos existentes

    typedef tipo_original sinonimo;

    Qualquer tipo C

    Declaração:

    Declaração já vista pelo compilador

    >

  • 83

    Curso C - IC/UNICAMP

    Typedef

    Typedef: Definir novos nomes para tipos existentes

    typedef tipo_original sinonimo;

    Qualquer tipo C

    Declaração:

    Declaração já vista pelo compilador Novo nome do tipo

    >

  • 84

    Curso C - IC/UNICAMP

    Typedef

    Exemplo:

    typedef int inteiro ;

    Definir sinônimo para int :

    Sinônimos para nomes de tipos

    >

  • 85

    Curso C - IC/UNICAMP

    Typedef

    Exemplo:

    typedef int inteiro ;

    Definir sinonimo para int :

    inteiro numero;

    Declarar variável com o sinonimo:

    int numero;

    Declaração equivalente:

    Sinonimos para nomes de tipos

    >

  • 86

    Curso C - IC/UNICAMP

    Typedef

    Exemplo:

    typedef unsigned long long int superint ;

    Definir sinonimo para unsigned long long int :

    superint numero;

    Declarar variável com o sinonimo:

    unsigned long long int numero;

    Declaração equivalente:

    Abreviar nomes de tipos

    >

  • 87

    Curso C - IC/UNICAMP

    Typedef

    Exemplo:

    struc TipoComplexo {double real;double imaginario;

    }

    Definição de número complexo:

    Ocultar detalhes da estrutura

    >

  • 88

    Curso C - IC/UNICAMP

    Typedef

    Exemplo:

    struct TipoComplexo numero;

    Declarar variável de número complexo:

    struc TipoComplexo {double real;double imaginario;

    }

    Definição de número complexo:

    Ocultar detalhes da estrutura

    >

  • 89

    Curso C - IC/UNICAMP

    Typedef

    Exemplo:

    struct TipoComplexo numero;

    Declarar variável de número complexo:

    struc TipoComplexo {double real;double imaginario;

    }

    Definição de número complexo:

    Ocultar detalhes da estrutura

    Não desejamos saber que TipoComplexo é estrutura

    >

  • 90

    Curso C - IC/UNICAMP

    Typedef

    Exemplo:

    struct TipoComplexo {double real;double imaginario;

    }

    Ocultar detalhes da estrutura

    >

  • 91

    Curso C - IC/UNICAMP

    Typedef

    Exemplo:

    typedef struct TipoComplexo complexo ;

    Definir sinonimo que esconde struct TipoComplexo :

    struct TipoComplexo {double real;double imaginario;

    }

    Ocultar detalhes da estrutura

    >

  • 92

    Curso C - IC/UNICAMP

    Typedef

    Exemplo:

    typedef struct TipoComplexo complexo ;

    Definir sinonimo que esconde struct TipoComplexo :

    struct TipoComplexo {double real;double imaginario;

    }

    Ocultar detalhes da estrutura

    complexo numero;

    Declarar variável:

    >

  • 03/05/2011 08:58 93

    Curso de C

    Enumerações

  • 94

    Curso C - IC/UNICAMP

    Enumerações

    Aprender a representar um conjunto de

    opções através de identificadores

    Objetivos:

    >

  • 95

    Curso C - IC/UNICAMP

    Enumerações

    char forma_pagamento;

    switch (forma_pagamento) {case ‘d’: // dinheiro

    ...break;

    case ‘c’: // cartão...break;

    case ‘v’: // vale...break;

    }

    char forma_pagamento;

    switch (forma_pagamento) {case ‘d’: // dinheiro

    ...break;

    case ‘c’: // cartão...break;

    case ‘v’: // vale...break;

    }

    Convenção de

    significados

    >

  • 96

    Curso C - IC/UNICAMP

    Enumerações

    char forma_pagamento;

    switch (forma_pagamento) {case ‘d’: // dinheiro

    ...break;

    case ‘c’: // cartão...break;

    case ‘v’: // vale...break;

    }

    char forma_pagamento;

    switch (forma_pagamento) {case ‘d’: // dinheiro

    ...break;

    case ‘c’: // cartão...break;

    case ‘v’: // vale...break;

    }

    Problemas:• Criar a convenção• Manter a convenção• Adicionar significados• Alterações na convenção

    Problemas:• Criar a convenção• Manter a convenção• Adicionar significados• Alterações na convenção

    Convenção de

    significados

    >

  • 97

    Curso C - IC/UNICAMP

    • Enumeração: conjunto de nomes

    • Associa internamente cada nome a um

    número

    • Valor da variável tipo enumeração é

    sempre apenas uma das opções

    • Enumeração: conjunto de nomes

    • Associa internamente cada nome a um

    número

    • Valor da variável tipo enumeração é

    sempre apenas uma das opções

    Enumerações

    Conceitos:

    >

  • 98

    Curso C - IC/UNICAMP

    Enumeações

    Declaração:

    enum nome_enumeracao {opcao1, opcao2, ...

    } variavel;

    >

  • 99

    Curso C - IC/UNICAMP

    Enumeações

    Declaração:

    enum nome_enumeracao {opcao1, opcao2, ...

    } variavel;

    Tipo Enumeração

    Lista de

    opções

    Cria variável

    Nome da

    enumeração

    >

  • 100

    Curso C - IC/UNICAMP

    Enumeações

    Declaração:

    enum nome_enumeracao {opcao1, opcao2, ...

    } variavel;

    Tipo Enumeração

    Lista de

    opções

    Cria variável

    Nome da

    enumeração

    • Declara enumeração• Memoriza a declaração• Novo tipo de dados• Cria a variável

    • Declara enumeração• Memoriza a declaração• Novo tipo de dados• Cria a variável

    >

  • 101

    Curso C - IC/UNICAMP

    Enumerações

    Uso de enumerações:

    enum { dinheiro , cheque , vale_refeicao , cartao } forma_pagamento;

    Declaração:0 1 2

    3

    >

  • 102

    Curso C - IC/UNICAMP

    Enumerações

    Uso de enumerações:

    forma_pagamento = cheque ;forma_pagamento = 1;

    Atribuição:

    enum { dinheiro , cheque , vale_refeicao , cartao } forma_pagamento;

    Declaração:0 1 2

    3

    switch (forma_pagamento) {case dinheiro : ...

    break;case cheque : ...

    break;case vale_refeicao : ...

    break;case cartao : ...

    break; }

    Seleção:

    >

  • 103

    Curso C - IC/UNICAMP

    Enumerações

    Declaração:

    enum nome_enumeracao {opcao1 = valor1, opcao2 = valor2, ...

    } variavel;

    Tipo Enumeração

    Lista de

    opções

    Cria variável

    Nome da

    enumeração

  • 104

    Curso C - IC/UNICAMP

    Enumerações

    Declaração:

    enum nome_enumeracao {opcao1 = valor1, opcao2 = valor2, ...

    } variavel;

    Tipo Enumeração

    Lista de

    opções

    Cria variável

    Nome da

    enumeração

    Associação

    manual entre

    nomes e valores

    >

  • 105

    Curso C - IC/UNICAMP

    Enumerações

    Uso de enumerações:

    enum {dinheiro = ‘d’,cheque = ‘c’,vale_refeicao = ‘v’,cartao = ‘k’

    } forma_pagamento;

    Declaração:

    >

  • 03/05/2011 08:58 106

    Enumerações

    Fim de capítulo