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
Top Related