Você está na página 1de 18

Prof: Bonny Kathy Soares dos Santos

Aula 3 - Structs
2

Problemtica
Olmpia uma veterinria que acabou de
abrir uma clnica em sua cidade. Ela ainda
no teve tempo e dinheiro para aderir a um
sistema que faa o controle do seu negcio.
Mas o filho dela , que um tcnico em
informtica se propos a ajudar a me
desenvolvendo um pequeno aplicativo em C
apenas para manter, inicialmente, algumas
informaes dos clientes como:

nome, telefone, bairro e rua.

O jovem pretende desenvolver, para isso,


uma espcie de lista que mantenha essas
informaes e as salve num aquirvo de
texto.

Como essa necessidade poderia ser


atendida?
3

Processando a Informao
O filho de Olmpia comea a se perguntar como
poderia desenvolver o aplicativo. Ele percebe que
fcil definir tipos simples de dados como para
nome, rua e bairro e que criar uma lista seria o
mesmo que criar um vetor que armazenasse
esses dados.

O problema : um vetor armazena um nico tipo


de dado, e um dado por vez. Ento, como ele
poderia armazenar nome, telefone, rua e bairro
de vrios clientes num vetor sem causar
confuso?
4

Structs
Em C foi visto que todos os tipos de dados char, int,
float ou double podem ser armazenados em variveis
simples.

A linguagem C tambm d suporte a criao de novos


tipos de dados definidos pelos usurios.

Uma estrutura um conjunto de uma ou mais


variveis agrupadas sob um nico nome, de forma a
facilitar sua referncia.

Estruturas podem conter elementos com qualquer tipo


de dado vlido em C.
5

Geralmente, todos os elementos na estrutura


so logicamente relacionados. Vejamos um
exemplo:
struct Pessoa{

char nome[30];
char sexo;
short int idade;

};

A palavra struct informa ao compilador que um


modelo de estrutura est sendo definido
6

Declarando variveis structs


Para declarar uma varivel de um tipo de
estrutura, basta indicar qual o tipo de estruct
seguido do nome das variveis. Exemplo:

struct Pessoa pes_1, pes_2;


7

A declarao de variveis pode ser tambm


realizada quando se faz a definio da prpria
estrutura atravs da sitaxe abaixo:

struct Pessoa{

char nome[30];
char sexo;
short int idade;

}pes_1, pes_2;
8

Carga Inicial Autommtica de


Structs
possvel inicializar uma varivel do tipo struct
durante sua declarao:

struct Data{
int dia;
char mes[3];
int ano;
};

struct Data my_date = {12, Fev,1990};


9

Se a varivel a ser iniciada for um vetor, a carga


inicial feita do mesmo modo, colocando cada
um dos elementos dentro de chaves.

Exemplos:

struct Data data[] ={{1,Jan,1990},{2,Fev,1920},{3, Mar,1990}};

struct Data data[3] = {{1,Jan,1990},{2,Fev,1920},{3, Mar,1990}};


10

Acesso aos Membros de uma


struct
Elementos individuais de estruturas so
refenciados por meio do operador .(ponto).

Exemplo:

Atribuindo:
nome_estruct.nome_elemento = valor;

Exibindo:
printf(%formato,nome_estruct.nome_elemento);
11

Exemplo

Preenchendo:

data.dia = 1;
strcpy(data.mes, Jan);
data.ano = 2008;

Exibindo:

printf(%d,data.dia);
puts(data.mes);
printf(%d,data.ano);
12

Passando Structs como


Argumentos para Funes
A passagem de argumentos do tipo struct so
feitos da mesma maneira que realizada a
passagem de variveis simples.

void preencherStruct(struct Data d){

scanf(%d,&d.dia);
scanf(%s,&d.mes);
scanf(%d,&d.ano);

}
13

Retornando structs
O retorno de estructs feito igualmente ao
retorno de um tipo de dado qualquer.
struct Cachorro preencher(raca,idade)
struct Cachorro{ char raca[20];
short int idade;
{
struct Cachorro c;
char raca[20]; strcpy(c.raca, raca);
short int idade; c.idade = idade;

} return c;

}
14

Definio de Tipos - Typedef


Uma das desvantagens existentes na utilizao de estruturas est na
declaro das variveis, que tem sempre que ser precedidas da palavra
reservada struct, seguida do nome da estrutura.

O ideal seria podermos representar uma estrutura unicamente atravs


de uma palavra (um sinnimo), tal como se faz com os tipos-base de
uma linguagem.

Para isso utiliza-se typedef:

typedef struct pessoa{ typedef struct{

char nome[30]; char nome[30];


char sexo; OU char sexo;
short int idade; short int idade;

}pessoa; }pessoa;
15

Ateno! No permitida a declara de


variveis numa declarao typedef.

typedef struct pessoa{

char nome[30];
char sexo;
short int idade;
ERRADO!

}pessoa pes_info;
16

Struct como Membro de Outra


Struct
Um membro de uma estrutura pode ser declarado como
outra estrutura. Veja:

typedef struct{ typedef struct {


char nome[20]; char nome[30];
char bairro[20]; short int idade;
char cidade[20]; char sexo[1];
char telefone[12];
}Endereco;
Endereco end;

}Pessoa;
17

Se declararmos a varivel : Pessoa pes, o


acesso ser possvel:

strcpy(pes.nome, Emanuel);
pes.idade = 35;
pes.sexo = M;
strcpy(pes.telefone, (88)99008765);

strcpy(pes.end.rua, Alvaro Jobin Fonseca);


strcpy(pes.end.bairro, Dom Manuel);
strcpy(pes.end.cidade, So Paulo);
18

Referncias Bobliogrficas
SCHILDT, Herbert. C completo e total. 3. ed.
So Paulo: MAKRON Books. 1995, 815p.

TANENBAUM Aaron Ai. LANGSAM,


Yedidyah. AUGENSTEN, Moshe J. Estrutura
de dados usando c. So Paulo: MAKRON
Books. 1995.