25
Linguagem de Programação 1 Estruturas e Estruturas e Tipos de Dados Tipos de Dados em C em C

Linguagem de Programação 1

Embed Size (px)

DESCRIPTION

Linguagem de Programação 1. Estruturas e Tipos de Dados em C. Estruturas – Conceito. Uma estrutura ( struct ) é uma coleção de uma ou mais variáveis, possivelmente de tipos diferentes, agrupadas sob um único nome. - PowerPoint PPT Presentation

Citation preview

Page 1: Linguagem de Programação 1

Linguagem de Programação 1

Estruturas e Tipos Estruturas e Tipos de Dados em Cde Dados em C

Page 2: Linguagem de Programação 1

Estruturas – ConceitoEstruturas – ConceitoEstruturas – ConceitoEstruturas – Conceito

Uma estrutura (Uma estrutura (structstruct) é uma coleção de uma ou mais variáveis, ) é uma coleção de uma ou mais variáveis, possivelmente de tipos diferentes, agrupadas sob um único nome. possivelmente de tipos diferentes, agrupadas sob um único nome.

Estruturas constituem um recurso importante para organizar os Estruturas constituem um recurso importante para organizar os dados utilizados por um programa pois trata um grupo de valores dados utilizados por um programa pois trata um grupo de valores como uma única variável.como uma única variável.

Estruturas são classificadas como Estruturas são classificadas como variáveis compostas variáveis compostas heterogêneasheterogêneas, pois , pois podempodem agrupar variáveis de tipos diferentes. agrupar variáveis de tipos diferentes.

Em contraposição, temos os vetores e matrizes, classificados Em contraposição, temos os vetores e matrizes, classificados como como variáveis compostas variáveis compostas homogêneashomogêneas, pois somente agrupam , pois somente agrupam variáveis do mesmo tipo.variáveis do mesmo tipo.

Page 3: Linguagem de Programação 1

Exemplo de declaração de uma estrutura Exemplo de declaração de uma estrutura em C:em C:

struct ponto{ int x; int y;};

struct ponto{ int x; int y;};

Estruturas – DeclaraçãoEstruturas – DeclaraçãoEstruturas – DeclaraçãoEstruturas – Declaração

A palavra-chave A palavra-chave structstruct informa ao compilador que um informa ao compilador que um modelo de estrutura está sendo definido.modelo de estrutura está sendo definido.

““ponto”ponto” é uma é uma etiquetaetiqueta que dá nome à que dá nome à definiçãodefinição da estrutura. da estrutura.

Uma definição de estrutura é um Uma definição de estrutura é um comandocomando, por isso deve , por isso deve terminar em ponto-e-vírgula.terminar em ponto-e-vírgula.

Page 4: Linguagem de Programação 1

Os nomes declarados entre as chaves são os Os nomes declarados entre as chaves são os campos (ou campos (ou membros) membros) da estrutura.da estrutura.

Os campos de uma mesma estrutura devem ter Os campos de uma mesma estrutura devem ter nomes nomes diferentesdiferentes..

Porém, estruturas diferentes podem conter Porém, estruturas diferentes podem conter campos com o campos com o mesmo nomemesmo nome..

A definição de uma estrutura A definição de uma estrutura não reservanão reserva qualquer qualquer espaço espaço na memóriana memória..

Note que, no exemplo dado, nenhuma variável foi Note que, no exemplo dado, nenhuma variável foi declarada de fato, apenas a forma dos dados foi definida.declarada de fato, apenas a forma dos dados foi definida.

Essa definição, porém, Essa definição, porém, cria um novo tipo de dadoscria um novo tipo de dados, que , que pode ser usado para declarar variáveis.pode ser usado para declarar variáveis.

Estruturas – DeclaraçãoEstruturas – DeclaraçãoEstruturas – DeclaraçãoEstruturas – Declaração

Page 5: Linguagem de Programação 1

struct ponto{ int x; int y;};...struct ponto p;

struct ponto{ int x; int y;};...struct ponto p;

Duas maneiras de declarar a variável Duas maneiras de declarar a variável pp do tipo do tipo pontoponto::

struct ponto{ int x; int y;} p;

struct ponto{ int x; int y;} p;

ou

Dois comandos:Dois comandos:•DefineDefine estruturaestrutura •Declara variávelDeclara variável da da estrutura definidaestrutura definida

Um comando:Um comando:•DefineDefine estruturaestrutura e e declara variáveldeclara variável da da estrutura definidaestrutura definida

Declarando uma variável de tipo estruturaDeclarando uma variável de tipo estruturaDeclarando uma variável de tipo estruturaDeclarando uma variável de tipo estrutura

Page 6: Linguagem de Programação 1

Novos tipos de dados podem ser definidos Novos tipos de dados podem ser definidos utilizando-se a palavra-chave utilizando-se a palavra-chave typedeftypedef. .

Declarando uma estrutura utilizando Declarando uma estrutura utilizando typedeftypedefDeclarando uma estrutura utilizando Declarando uma estrutura utilizando typedeftypedef

typedef struct nome_da_estrutura{ <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n;} nome_do_tipo;

typedef struct nome_da_estrutura{ <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n;} nome_do_tipo;

Page 7: Linguagem de Programação 1

Exemplo:Exemplo:

Com um typedef definido para a estrutura podemos Com um typedef definido para a estrutura podemos utilizar apenas o nome do tipo (typedef) na declaração utilizar apenas o nome do tipo (typedef) na declaração de uma variável (sem precisar usar a palavra-chave de uma variável (sem precisar usar a palavra-chave struct).struct).

Declarando uma estrutura utilizando Declarando uma estrutura utilizando typedeftypedefDeclarando uma estrutura utilizando Declarando uma estrutura utilizando typedeftypedef

typedef struct ponto{ int x; int y;} tipoPonto;

tipoPonto ponto_central;

typedef struct ponto{ int x; int y;} tipoPonto;

tipoPonto ponto_central;

Page 8: Linguagem de Programação 1

Os campos de uma estrutura podem ser Os campos de uma estrutura podem ser de de qualquer tipoqualquer tipo, inclusive uma estrutura , inclusive uma estrutura previamente definida. Sendo assim uma previamente definida. Sendo assim uma estrutura pode conter:estrutura pode conter:

Tipos de dados simples (int, char, double, ...)

Vetores e Matrizes

Outras estruturas.

Porém, o tipo dos campos não podem ser Porém, o tipo dos campos não podem ser o do próprio tipo que está sendo definido.o do próprio tipo que está sendo definido.

Estruturas – DeclaraçãoEstruturas – DeclaraçãoEstruturas – DeclaraçãoEstruturas – Declaração

Page 9: Linguagem de Programação 1

Estruturas – Declaração (Exemplos)Estruturas – Declaração (Exemplos)Estruturas – Declaração (Exemplos)Estruturas – Declaração (Exemplos)

struct tipo_endereco{ char rua[50]; int numero; char bairro[20]; char cidade[30; char sigla_estado[3]; long int CEP;};

struct tipo_endereco{ char rua[50]; int numero; char bairro[20]; char cidade[30; char sigla_estado[3]; long int CEP;};

struct ficha_pessoal{ char nome[50]; long int telefone; struct tipo_endereco endereco; };

struct ficha_pessoal{ char nome[50]; long int telefone; struct tipo_endereco endereco; };

Page 10: Linguagem de Programação 1

A definição do formato de uma estrutura pode A definição do formato de uma estrutura pode ser feita dentro da função principal (ser feita dentro da função principal (mainmain) ou fora ) ou fora dela.dela.

Usualmente, Usualmente, declara-se fora da função principaldeclara-se fora da função principal, , de modo que outras funções também possam de modo que outras funções também possam “enxergar” a estrutura definida.“enxergar” a estrutura definida.

Declarando uma estruturaDeclarando uma estruturaDeclarando uma estruturaDeclarando uma estrutura

Page 11: Linguagem de Programação 1

<nome_da_variável_da_estrutura><nome_da_variável_da_estrutura>..<campo><campo><nome_da_variável_da_estrutura><nome_da_variável_da_estrutura>..<campo><campo>

Acessando os campos de uma estruturaAcessando os campos de uma estruturaAcessando os campos de uma estruturaAcessando os campos de uma estrutura

Podemos acessar Podemos acessar individualmenteindividualmente os os campos de uma determinada estrutura campos de uma determinada estrutura como se fossem variáveis comuns.como se fossem variáveis comuns.

A sintaxe para A sintaxe para acessaracessar e e manipularmanipular campos de estruturas é a seguinte:campos de estruturas é a seguinte:

Page 12: Linguagem de Programação 1

struct ficha_pessoal aluno;cout<<Digite o nome do aluno: ”;gets(aluno.nome);

cout<<“Digite o telefone do aluno: ”;cin>>aluno.telefone;

struct ficha_pessoal aluno;cout<<Digite o nome do aluno: ”;gets(aluno.nome);

cout<<“Digite o telefone do aluno: ”;cin>>aluno.telefone;

Leitura dos campos de uma estruturaLeitura dos campos de uma estruturaLeitura dos campos de uma estruturaLeitura dos campos de uma estrutura

• A leitura dos campos de uma estrutura a partir do teclado deve ser feita campo a campo, como se fossem variáveis independentes.

1

Page 13: Linguagem de Programação 1

Vetor de estruturasVetor de estruturasVetor de estruturasVetor de estruturas

Usado quando precisamos de diversas cópias de Usado quando precisamos de diversas cópias de uma estrutura.uma estrutura.

Por exemplo, cada aluno de uma turma constitui Por exemplo, cada aluno de uma turma constitui um elemento de um vetor, cujo tipo é uma um elemento de um vetor, cujo tipo é uma estrutura de dados que define as características estrutura de dados que define as características de cada aluno.de cada aluno.

structstruct etiqueta variável[dimensão]; etiqueta variável[dimensão];structstruct etiqueta variável[dimensão]; etiqueta variável[dimensão];

2

Page 14: Linguagem de Programação 1

Atribuindo estruturasAtribuindo estruturasAtribuindo estruturasAtribuindo estruturas

Podemos atribuir uma variável de estrutura a Podemos atribuir uma variável de estrutura a outra variável da mesma estrutura:outra variável da mesma estrutura:

Exemplo:Exemplo:

Neste caso todos os campos da estrutura Neste caso todos os campos da estrutura primeiraprimeira serão copiados para a serão copiados para a segundasegunda..

structstruct ficha_pessoal primeira, segunda; ficha_pessoal primeira, segunda;//faz a leitura dos campos de //faz a leitura dos campos de primeiraprimeira segunda = primeira;segunda = primeira; //atribuição //atribuição

structstruct ficha_pessoal primeira, segunda; ficha_pessoal primeira, segunda;//faz a leitura dos campos de //faz a leitura dos campos de primeiraprimeira segunda = primeira;segunda = primeira; //atribuição //atribuição

Page 15: Linguagem de Programação 1

Ponteiros para estruturasPonteiros para estruturasPonteiros para estruturasPonteiros para estruturas

Como outros tipos de dados, ponteiros para Como outros tipos de dados, ponteiros para estruturas são declarados colocando-se o estruturas são declarados colocando-se o operador operador * * na frente do nome da variável na frente do nome da variável estrutura:estrutura:

struct ficha_pessoal *aluno; OU

tficha *aluno;

struct ficha_pessoal *aluno; OU

tficha *aluno;

Page 16: Linguagem de Programação 1

Ponteiros para estruturasPonteiros para estruturasPonteiros para estruturasPonteiros para estruturas

Para acessar uma estrutura com ponteiros Para acessar uma estrutura com ponteiros pode-se usar duas sintaxes:pode-se usar duas sintaxes: Operador ponto:Operador ponto:

Operador seta:Operador seta:

*<ponteiro_estrutura>.<campo>*<ponteiro_estrutura>.<campo>

<ponteiro_estrutura>-><campo><ponteiro_estrutura>-><campo>

3

Page 17: Linguagem de Programação 1

Passando estruturas para funçõesPassando estruturas para funçõesPassando estruturas para funçõesPassando estruturas para funções

Podemos passar Podemos passar estruturas inteiras ou estruturas inteiras ou apenas camposapenas campos destas como argumento destas como argumento para funções.para funções.

Tal passagem pode ser realizada Tal passagem pode ser realizada por valorpor valor ou ou por referênciapor referência..

As estruturas manipuladas por mais de uma As estruturas manipuladas por mais de uma função devem ser declaradas globalmente, função devem ser declaradas globalmente, antesantes da definição da função. da definição da função.

Page 18: Linguagem de Programação 1

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando campos por valorcampos por valorPassando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando campos por valorcampos por valor

Este processo é realizado da Este processo é realizado da mesma forma que mesma forma que para variáveis simplespara variáveis simples, atentando-se para as , atentando-se para as peculiaridades das estruturas de dados.peculiaridades das estruturas de dados.

// Chamadafuncao(estrutura.campo, ...);

// Definicao formal<tipo> funcao(<tipo> variavel, ...)

// Chamadafuncao(estrutura.campo, ...);

// Definicao formal<tipo> funcao(<tipo> variavel, ...)

Page 19: Linguagem de Programação 1

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando campos por referênciacampos por referênciaPassando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando campos por referênciacampos por referência

Da mesma forma que acontece para variáveis Da mesma forma que acontece para variáveis simples, deve-se pôr o operador simples, deve-se pôr o operador && antes do nome antes do nome da estrutura na chamada da função.da estrutura na chamada da função.

// Chamadafuncao(&estrutura.campo, ...);

// Definicao formal<tipo> funcao(<tipo> *variavel, ...)

// Chamadafuncao(&estrutura.campo, ...);

// Definicao formal<tipo> funcao(<tipo> *variavel, ...)

Page 20: Linguagem de Programação 1

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando estruturas inteiras por valorestruturas inteiras por valorPassando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando estruturas inteiras por valorestruturas inteiras por valor

Ao contrário de arrays, estruturas podem ser Ao contrário de arrays, estruturas podem ser passadas passadas por valorpor valor como argumentos de função. como argumentos de função.

Para estruturas grandes, há o problema da cópia Para estruturas grandes, há o problema da cópia de valores na pilha de memória.de valores na pilha de memória.

// Chamadafuncao(estrutura, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> estrutura, ...)

// Chamadafuncao(estrutura, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> estrutura, ...)

4

Page 21: Linguagem de Programação 1

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando estruturas inteiras por estruturas inteiras por referênciareferência

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando estruturas inteiras por estruturas inteiras por referênciareferência

Permite alteração da estrutura sem necessidade Permite alteração da estrutura sem necessidade de criação de uma cópia na memória.de criação de uma cópia na memória.

// Chamadafuncao(&estrutura, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> *estrutura, ...)

// Chamadafuncao(&estrutura, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> *estrutura, ...)

5

Page 22: Linguagem de Programação 1

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando vetor de estruturasvetor de estruturasPassando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando vetor de estruturasvetor de estruturas

Funciona de forma semelhante a vetor de Funciona de forma semelhante a vetor de variáveis simples.variáveis simples.

Permite apenas passagem de parâmetros por Permite apenas passagem de parâmetros por referência, pois trata-se, afinal, de um vetor.referência, pois trata-se, afinal, de um vetor.

// Chamadafuncao(vetor, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> vetor[], ...)

// Chamadafuncao(vetor, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> vetor[], ...)

Page 23: Linguagem de Programação 1

Espaço alocado para uma estruturaEspaço alocado para uma estruturaEspaço alocado para uma estruturaEspaço alocado para uma estrutura

struct aluno { char nome[4]; /* array 4 bytes */ short idade; /* 2 bytes */ char matricula[8]; /* array 8 bytes */};

struct aluno al;Strcpy(al.nome, “Rui“);al.idade = 30;strcpy(al.matricula, "00/0001");

struct aluno { char nome[4]; /* array 4 bytes */ short idade; /* 2 bytes */ char matricula[8]; /* array 8 bytes */};

struct aluno al;Strcpy(al.nome, “Rui“);al.idade = 30;strcpy(al.matricula, "00/0001");

Page 24: Linguagem de Programação 1

A função sizeofA função sizeofA função sizeofA função sizeof

A função sizeof(tipo) retorna o tamanho em bytes ocupado em memória pelo tipo de dado passado como parâmetro

Exemplo: sizeof(int) => 2 bytes

sizeof(char) => 1 byte

sizeof(struct aluno) => 14 bytes

sizeof(struct aluno *) => 14 bytes

6

Page 25: Linguagem de Programação 1

QuestõesQuestõesQuestõesQuestões