Buscar

06-variaveis-compostas-homogeneas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 73 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 73 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 73 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Variáveis Compostas Homogêneas 
• Da mesma forma que a teoria de conjuntos: 
– Uma variável pode ser considerada como um 
elemento. 
– Uma estrutura de dados como um conjunto. 
 
• Quando uma estrutura de dados for composta 
de variáveis do mesmo tipo primitivo, tem-se 
um conjunto homogêneo de dados. 
Variável Composta Homogênea 
Unidimensional (Vetores) 
 
• Analogia a um edifício. 
– Edifício representa o conjunto de dados. 
– Os andares representam uma partição do edifício. 
 
• Para chegar a um determinado andar, precisa 
apenas do número do andar. 
Vetores em C 
• [modificador] tipo identificador[tamanho]; 
 
• unsigned int V[8]; 
 
 
• char Str[15]; 
 
0 1 2 3 4 5 6 7 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 
Vetores em C 
 
 
• Quando se declara um vetor, um espaço em 
bytes é reservado na memória e que se 
encontra linearmente disposto a partir de um 
endereço base. 
Executando Passo a Passo 
0 1 2 3 4 
int main() { 
 int V[5]; 
 V[0] = 2; 
 V[1] = 10; 
 V[V[0]] = V[0] + 5 * V[1]; 
 V[4] = V[2] – 8 / V[0]; 
 V[3] = V[1]; 
} 
Executando Passo a Passo 
0 1 2 3 4 
int main() { 
 int V[5]; 
 V[0] = 2; 
 V[1] = 10; 
 V[V[0]] = V[0] + 5 * V[1]; 
 V[4] = V[2] – 8 / V[0]; 
 V[3] = V[1]; 
} 
Executando Passo a Passo 
 
0 1 2 3 4 
int main() { 
 int V[5]; 
 V[0] = 2; 
 V[1] = 10; 
 V[V[0]] = V[0] + 5 * V[1]; 
 V[4] = V[2] – 8 / V[0]; 
 V[3] = V[1]; 
} 
Executando Passo a Passo 
 7 
0 1 2 3 4 
int main() { 
 int V[5]; 
 V[0] = 2; 
 V[1] = 10; 
 V[V[0]] = V[0] + 5 * V[1]; 
 V[4] = V[2] – 8 / V[0]; 
 V[3] = V[1]; 
} 
Executando Passo a Passo 
 7 
0 1 2 3 4 
int main() { 
 int V[5]; 
 V[0] = 2; 
 V[1] = 10; 
 V[V[0]] = V[0] + 5 * V[1]; 
 V[4] = V[2] – 8 / V[0]; 
 V[3] = V[1]; 
} 
Executando Passo a Passo 
 
0 1 2 3 4 
int main() { 
 int V[5]; 
 V[0] = 2; 
 V[1] = 10; 
 V[V[0]] = V[0] + 5 * V[1]; 
 V[4] = V[2] – 8 / V[0]; 
 V[3] = V[1]; 
} 
Executando Passo a Passo 
 
0 1 2 3 4 
int main() { 
 int V[5]; 
 V[0] = 2; 
 V[1] = 10; 
 V[V[0]] = V[0] + 5 * V[1]; 
 V[4] = V[2] – 8 / V[0]; 
 V[3] = V[1]; 
} 
Executando Passo a Passo 
 
0 1 2 3 4 
int main() { 
 int V[5]; 
 V[0] = 2; 
 V[1] = 10; 
 V[V[0]] = V[0] + 5 * V[1]; 
 V[4] = V[2] – 8 / V[0]; 
 V[3] = V[1]; 
} 
Executando Passo a Passo 
 
0 1 2 3 4 
int main() { 
 int V[5]; 
 V[0] = 2; 
 V[1] = 10; 
 V[V[0]] = V[0] + 5 * V[1]; 
 V[4] = V[2] – 8 / V[0]; 
 V[3] = V[1]; 
} 
Executando Passo a Passo 
 
0 1 2 3 4 
int main() { 
 int V[5]; 
 V[0] = 2; 
 V[1] = 10; 
 V[V[0]] = V[0] + 5 * V[1]; 
 V[4] = V[2] – 8 / V[0]; 
 V[3] = V[1]; 
} 
Executando Passo a Passo 
 7 
0 1 2 3 4 
int main() { 
 int V[5]; 
 V[0] = 2; 
 V[1] = 10; 
 V[V[0]] = V[0] + 5 * V[1]; 
 V[4] = V[2] – 8 / V[0]; 
 V[3] = V[1]; 
} 
Inicialização de Vetores 
• A inicialização de um vetor é realizada quando 
da declaração do vetor. 
• unsigned int Vetor[4] = {100, 200, 300, 400}; 
 
 
• float B[4] = {2.4, 124, 2e1, 3E-5}; 
 
 
 
 
0 1 2 3 
0 1 2 3 
Inicialização de Vetores 
• double Tipos[4] = {1.1, 1.2, 1.3, 1.4}; 
 
 
• unsigned int Idades[10] = {10, 22, 21, 18, 50, 
23, 45, 60, 10, 34}; 
0 1 2 3 
0 1 2 3 4 5 6 7 8 9 
Inicialização de Vetores de Caracteres 
• char Nome*14+ = “Computação”; 
 
 
• char Nome*10+ = “Computação”; 
 
 
C o m p u t a ç ã o \0 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 
C o m p u t a ç ã o 
0 1 2 3 4 5 6 7 8 9 
Inicialização de Vetores de Caracteres 
• unsigned char V*5+ = “UFMG”; 
 
 
• unsigned char Str*7+ = ,‘P’, ’U’, ’C’, ’-’, ’M’, ’G’, ‘\0’-; 
 
 
• char X*5+ = “P”; 
 
U F M G \0 
0 1 2 3 4 
P U C - M G \0 
0 1 2 3 4 5 6 
P \0 
0 1 2 3 4 
Vetores sem Dimensão 
• Dadas as declarações e inicializações: 
– int A[] = {12,13,14,15}; 
– char B*+ = “ENGENHARIA ELÉTRICA”; 
• Estas declarações e inicializações equivalem a: 
– int *A = {12,13,14,15}; 
– char *B = “ENGENHARIA ELÉTRICA”; 
• São duas notações diferentes para a mesma 
coisa. 
Vetores sem Dimensão 
 
• A[] ou B[] são ponteiros que possuem endereços 
das áreas de constantes. 
 
• MUITO CUIDADO AO MANIPULAR PORQUE 
PODERÁ ESTAR MANIPULANDO A ÁREA DE 
CÓDIGO E/OU A ÁREA DE DADOS DA MEMÓRIA. 
 
Observações sobre Vetores 
 
• O cálculo do tamanho em bytes de um vetor está 
diretamente em função do tamanho do vetor e 
do tipo do vetor. 
 
• Tamanho em bytes = tamanho do tipo * tamanho 
do vetor. 
Observações sobre Vetores 
• Na linguagem C não existe verificação dos limites 
de um vetor. 
• Pode-se ultrapassar os limites e escrever dados 
no lugar de uma outra variável ou mesmo no 
código do programa. 
• É responsabilidade do programador prover a 
verificação dos limites onde for necessário, de 
modo que nunca invada o espaço de memória, 
de uma outra variável. 
 
Variáveis Compostas Homogêneas 
Multidimensionais (Matrizes) 
• Analogia a um edifício. 
– Edifício representa o conjunto de dados. 
– Os andares representam uma partição do edifício. 
– Os apartamentos representam uma partição do 
andar. 
• Para chegar a um determinado apartamento, é 
preciso: 
– do número do andar . 
– do número do apartamento. 
• Portanto duas informações (dois índices). 
Variáveis Compostas Homogêneas 
Multidimensionais (Matrizes) 
• Suponha um conjunto residencial com três 
prédios de apartamentos. 
• Tem-se uma estrutura homogênea 
tridimensional. 
• Para chegar a um apartamento é necessário: 
– O número do prédio. 
– O número do andar. 
– O número do apartamento. 
Variáveis Compostas Homogêneas 
Multidimensionais (Matrizes) 
 
 
• Dependendo do problema a ser resolvido, 
pode-se ter a estrutura composta homogênea 
multidimensional que se desejar. 
Matrizes em C 
[modificador] tipo identificador[num_linhas][num_colunas] 
short int M[5][7]; 
0 1 2 3 4 5 6 
0 
1 
2 
3 
4 
Matrizes em C 
 
 
• Quando se declara uma matriz, um espaço em 
bytes é reservado na memória que se 
encontra linearmente disposto a partir de um 
endereço base. 
Inicialização de Matrizes 
unsigned long int V[2][2] = {{111,222},{333,444}}; 
0 1 
0 111 222 
1 333 444 
double V[2][10] = {{1,1,1,1,1,1,1,1,1,1,},{2,2,2,2,2,2,2,2,2,2}}; 
0 1 2 3 4 5 6 7 8 9 
0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 
1 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
X 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
X 
Y 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
0 1 2 3 
0 
1 
2 
X 
Y 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
0 1 2 3 
0 0.0 0.0 0.0 0.0 
1 0.0 0.0 0.0 0.0 
2 0.0 0.0 0.0 0.0 
X 
Y 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
0 1 2 3 
0 0.0 0.0 0.0 0.0 
1 0.0 0.0 0.0 0.0 
2 0.0 0.0 0.0 0.0 
X 2 
Y 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2;y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
0 1 2 3 
0 0.0 0.0 0.0 0.0 
1 0.0 0.0 0.0 0.0 
2 0.0 0.0 0.0 0.0 
X 2 
Y 3 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
0 1 2 3 
0 10.0 0.0 0.0 0.0 
1 0.0 0.0 0.0 0.0 
2 0.0 0.0 0.0 0.0 
X 2 
Y 3 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
0 1 2 3 
0 10.0 0.0 0.0 0.0 
1 0.0 0.0 0.0 0.0 
2 0.0 0.0 0.0 0.0 
X 2 
Y 3 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
0 1 2 3 
0 10.0 0.0 0.0 0.0 
1 0.0 0.0 0.0 0.0 
2 0.0 0.0 0.0 0.0 
X 2 
Y 3 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
0 1 2 3 
0 10.0 0.0 0.0 0.0 
1 0.0 0.0 0.0 0.0 
2 0.0 0.0 0.0 0.0 
X 2 
Y 3 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
0 1 2 3 
0 10.0 0.0 0.0 0.0 
1 0.0 0.0 0.0 0.0 
2 0.0 14.34 0.0 0.0 
X 2 
Y 3 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
0 1 2 3 
0 10.0 0.0 0.0 0.0 
1 0.0 0.0 0.0 0.0 
2 0.0 14.34 3.e-3 0.0 
X 2 
Y 3 
Executando Passo a Passo 
int main() { 
 int x, y; 
 double M[3][4] = {{0,0,0},{0,0,0},{0,0,0}}; 
 
 x = 2; 
 y = 3; 
 M[0][0] = 10; 
 M[2][1] = 4.34 + M[x – 2][y – 3]; 
 M[x][x] = 3.e-3; 
 M[x][y] = 100.01; 
} 
 
0 1 2 3 
0 10.0 0.0 0.0 0.0 
1 0.0 0.0 0.0 0.0 
2 0.0 14.34 3.e-3 100.01 
X 2 
Y 3 
Declarando uma Matriz 
char V[2][5]; 
char *m; 
 
m = (char *) V; 
m*5*1+0+ = ‘X’; 
m*5*0+3+ = ‘Y’; 
m*5*1+1+ = ‘Z’; 
FF00 
FF01 
FF02 
FF03 
FF04 
FF05 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
Total de colunas*linha+coluna 
0 1 2 3 4 
0 
1 
Declarando um Ponteiro para 
uma Matriz 
char V[2][5]; 
char *m; 
 
m = (char *) V; 
m*5*1+0+ = ‘X’; 
m*5*0+3+ = ‘Y’; 
m*5*1+1+ = ‘Z’; 
FF00 
FF01 
FF02 
FF03 
FF04 
FF05 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
Total de colunas*linha+coluna 
0 1 2 3 4 
0 
1 
V 
Recebe o Endereço de uma 
Matriz 
char V[2][5]; 
char *m; 
 
m = (char *) V; 
m*5*1+0+ = ‘X’; 
m*5*0+3+ = ‘Y’; 
m*5*1+1+ = ‘Z’; 
FF00 
FF01 
FF02 
FF03 
FF04 
FF05 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 1111 1111 
FF0D 0000 0001 
FF0E 0000 0000 
FF0F 0000 0000 
FF10 
FF11 
Total de colunas*linha+coluna 
0 1 2 3 4 
0 
1 
V 
Atribuindo 
char V[2][5]; 
char *m; 
 
m = (char *) V; 
m*5*1+0+ = ‘X’; 
m*5*0+3+ = ‘Y’; 
m*5*1+1+ = ‘Z’; 
FF00 
FF01 
FF02 
FF03 
FF04 
FF05 1001 1000 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 1111 1111 
FF0D 0000 0001 
FF0E 0000 0000 
FF0F 0000 0000 
FF10 
FF11 
Total de colunas*linha+coluna 
0 1 2 3 4 
0 
1 X 
V 
Atribuindo 
char V[2][5]; 
char *m; 
 
m = (char *) V; 
m*5*1+0+ = ‘X’; 
m*5*0+3+ = ‘Y’; 
m*5*1+1+ = ‘Z’; 
FF00 
FF01 
FF02 
FF03 1001 1001 
FF04 
FF05 1001 1000 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 1111 1111 
FF0D 0000 0001 
FF0E 0000 0000 
FF0F 0000 0000 
FF10 
FF11 
Total de colunas*linha+coluna 
0 1 2 3 4 
0 Y 
1 X 
V 
Atribuindo 
char V[2][5]; 
char *m; 
 
m = (char *) V; 
m*5*1+0+ = ‘X’; 
m*5*0+3+ = ‘Y’; 
m*5*1+1+ = ‘Z’; 
FF00 
FF01 
FF02 
FF03 1001 1010 
FF04 
FF05 1001 1000 
FF06 1001 1000 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 1111 1111 
FF0D 0000 0001 
FF0E 0000 0000 
FF0F 0000 0000 
FF10 
FF11 
Total de colunas*linha+coluna 
0 1 2 3 4 
0 Y 
1 X Z 
V 
Variáveis Compostas Heterogêneas 
• Estrutura – é uma coleção de variáveis 
referenciadas por um nome. 
• Trata-se de uma maneira eficiente de se agrupar 
informações relacionadas. 
• A definição de uma estrutura forma um modelo 
que pode ser usado para criar variáveis 
estruturas. 
• As variáveis estruturas que compreendem a 
estrutura são chamadas elementos (CAMPOS) 
da estrutura 
Definição de uma Estrutura 
struct IDENTIFICADOR { 
 [modificador] tipo identificador; 
 [modificador] tipo identificador[tamanho]; 
 [modificador] tipo identificador[linhas][colunas]; 
 [modificador] tipo *identificador; 
 [modificador] tipo *identificador[tamanho]; 
 struct XXXX identificador; 
}; 
 
• Definir uma estrutura é criar um modelo. 
• Não ocupa espaço na memória 
Exemplo de Definição de uma 
Estrutura 
struct REGISTRO { 
 char nome[65]; 
 char rua[45]; 
 char cidade[25]; 
 char cep[8]; 
 char fone[11]; 
 int idade; 
 double salario; 
}; 
 
Declarações de Estruturas 
• struct REGISTRO funcionario; 
• struct REGISTRO funcionarios[10]; 
• struct REGISTRO *funcionario; 
• struct REGISTRO funcionarios[5][10]; 
• struct REGISTRO *funcionarios[7]; 
 
• Declarar uma estrutura é reservar um espaço na 
memória para a estrutura. 
Definição de Estruturas 
struct DATA { 
 int dia, mes, ano; 
}; 
struct PERIODO { 
 struct DATA inicio; 
 struct DATA fim; 
}; 
Declaração e Manipulação de 
Estruturas 
 /* declaração e inicialização */ 
 struct PERIODO p_1 = {{20,9,2011},{22,9,2011}}; 
 /* declarações sem inicializações */ 
 struct PERIODO p_2, p_3; 
 
 p_2 = p_1; /* atualização completa */ 
 p_3.inicio.dia = 13; /* atualização seletiva */ 
 p_3.inicio.mes = 10; /* atualização seletiva */ 
 p_3.inicio.ano = 2010; /* atualização seletiva */ 
 p_3.fim = p_2.fim; 
 
printf("\nData inicio: {%i,%i,%i}",p_3.inicio.dia,p_3.inicio.mes,p_3.inicio.ano); 
printf("\nData inicio: {%i,%i,%i}",p_3.fim.dia,p_3.fim.mes,p_3.fim.ano); 
Ponteiros para Estruturas 
 /* declaração e inicialização */ 
 struct PERIODO *m, a = {{20,9,2011},{22,9,2011}}; 
 /* atribuindo o endereço de uma estrutura */ 
 m = &a; 
 
 m->inicio.dia = 10; 
 m->fim.dia = 13; 
 m->fim.ano = 2012; 
 
 printf("\nData inicio: {%i,%i,%i}",m->inicio.dia,m->inicio.mes,m->inicio.ano); 
 printf("\nData inicio: {%i,%i,%i}", m->fim.dia, m->fim.mes, m->fim.ano); 
Espaço de Memória Ocupado 
• Corresponde ao número de bytes dos 
elementos (CAMPOS) da estrutura. 
• A declaração: 
– struct DATA d; 
– A variável d ocupa 12 bytes. 
• A declaração: 
– struct PERIODO p; 
– A variável p ocupa 24 bytes. 
Supondo Existir Limitações de 
Memória 
 /* definição da estrutura data */ 
struct DATA { 
 char dia, mes; 
 unsigned short ano; 
}; 
/* definição da estrutura PERIODO */ 
struct PERIODO { 
 struct DATA inicio, fim; 
}; 
Qual o ganho de memória? 
Qual seria o ganho de memória após a declaração 
de uma variável do tipo PERIODO? 
 
Versão antiga de PERIODO ao declarar: 
struct p; /* 12+12=24 bytes na memória */ 
 
Verão nova de PERIODO ao declarar: 
struct p; /* 4+4=8 bytes na memória */ 
 
Ganho de memoria: 
Ganho = 1 – novo (bytes)/antigo (bytes) 
 = 1 – 8/24 
 = 1 – 0,3333 = 0,6667 ≈ 66,67% de ganho. 
Uma Estrutura 
na Memória 
struct P = {{20,9,2011},{22,9,2011}}; 
 
P.fim.mes = 11; 
P.inicio.ano = 2010. 
 
printf(“\nDia: %i”,P.inicio.dia);Printf(“\nMes: %i”,P.fim.mes); 
FF00 
FF01 
FF02 
FF03 
FF04 
FF05 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
dia 
mes 
ano 
inicio 
dia 
mes 
ano 
fim 
P 
Uma Estrutura 
na Memória 
struct P = {{20,9,2011},{22,9,2011}}; 
 
P.fim.mes = 11; 
P.inicio.ano = 2010. 
 
printf(“\nDia: %i”,P.inicio.dia); 
Printf(“\nMes: %i”,P.fim.mes); 
FF00 
FF01 0001 0100 
FF02 0000 1001 
FF03 0000 0111 
FF04 1101 1011 
FF05 0001 0110 
FF06 0000 1001 
FF07 0000 0111 
FF08 1101 1011 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
dia 
mes 
ano 
inicio 
dia 
mes 
ano 
fim 
P 
Uma Estrutura 
na Memória 
struct P = {{20,9,2011},{22,9,2011}}; 
 
P.fim.mes = 11; 
P.inicio.ano = 2010. 
 
printf(“\nDia: %i”,P.inicio.dia); 
Printf(“\nMes: %i”,P.fim.mes); 
FF00 
FF01 0001 0100 
FF02 0000 1001 
FF03 0000 0111 
FF04 1101 1011 
FF05 0001 0110 
FF06 0000 1011 
FF07 0000 0111 
FF08 1101 1011 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
dia 
mes 
ano 
inicio 
dia 
mes 
ano 
fim 
P 
Uma Estrutura 
na Memória 
struct P = {{20,9,2011},{22,9,2011}}; 
 
P.fim.mes = 11; 
P.inicio.ano = 2010. 
 
printf(“\nDia: %i”,P.inicio.dia); 
Printf(“\nMes: %i”,P.fim.mes); 
FF00 
FF01 0001 0100 
FF02 0000 1001 
FF03 0000 0111 
FF04 1101 1010 
FF05 0001 0110 
FF06 0000 1011 
FF07 0000 0111 
FF08 1101 1011 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
dia 
mes 
ano 
inicio 
dia 
mes 
ano 
fim 
P 
Uma Estrutura 
na Memória 
struct P = {{20,9,2011},{22,9,2011}}; 
 
P.fim.mes = 11; 
P.inicio.ano = 2010. 
 
printf(“\nDia: %i”,P.inicio.dia); 
Printf(“\nMes: %i”,P.fim.mes); 
FF00 
FF01 0001 0100 
FF02 0000 1001 
FF03 0000 0111 
FF04 1101 1010 
FF05 0001 0110 
FF06 0000 1011 
FF07 0000 0111 
FF08 1101 1011 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
dia 
mes 
ano 
inicio 
dia 
mes 
ano 
fim 
P 
Uma Estrutura 
na Memória 
struct P = {{20,9,2011},{22,9,2011}}; 
 
P.fim.mes = 11; 
P.inicio.ano = 2010. 
 
printf(“\nDia: %i”,P.inicio.dia); 
Printf(“\nMes: %i”,P.fim.mes); 
FF00 
FF01 0001 0100 
FF02 0000 1001 
FF03 0000 0111 
FF04 1101 1010 
FF05 0001 0110 
FF06 0000 1011 
FF07 0000 0111 
FF08 1101 1011 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
dia 
mes 
ano 
inicio 
dia 
mes 
ano 
fim 
P 
Uniões 
 
• A definição é semelhante a definição de 
estruturas. Ao invés de struct tem-se union. 
 
• Compartilham a mesma posição de memória 
por duas ou mais diferentes variáveis 
(elementos ou campos da união) 
Definição/Declaração/Atualização 
/* definição */ 
union INT_32 { 
 char c[4]; 
 int i; 
}; 
/* declaração */ 
union INT_32 a; 
/* atualização */ 
a.i = 0xA0B0C0D0; 
a.c[0] = 0; 
 
Uma Estrutura 
na Memória 
union INT_32 U; 
 
U.i = 0xA0B0C0D0; 
 
printf(“\n%0X”,U.c*1+); 
printf(“\n%0X”,U.c*2+); 
printf(“\n%i”,U.c*1+); 
printf(“\n%i”,U.c*2+); 
FF00 
FF01 
FF02 
FF03 
FF04 
FF05 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
c[0] 
c[1] 
c[2] 
c[3] 
i U 
Uma Estrutura 
na Memória 
union INT_32 U; 
 
U.i = 0xA0B0C0D0; 
 
printf(“\n%0X”,U.c*1+); 
printf(“\n%0X”,U.c*2+); 
printf(“\n%i”,U.c*1+); 
printf(“\n%i”,U.c*2+); 
FF00 
FF01 1101 0000 
FF02 1100 0000 
FF03 1011 0000 
FF04 1010 0000 
FF05 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
c[0] 
c[1] 
i 
c[2] 
c[3] 
U 
Uma Estrutura 
na Memória 
union INT_32 U; 
 
U.i = 0xA0B0C0D0; 
 
printf(“\n%0X”,U.c*1+); 
printf(“\n%0X”,U.c*2+); 
printf(“\n%i”,U.c*1+); 
printf(“\n%i”,U.c*2+); 
FF00 
FF01 1101 0000 
FF02 1100 0000 
FF03 1011 0000 
FF04 1010 0000 
FF05 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
c[0] 
c[1] 
i 
c[2] 
c[3] 
U 
Uma Estrutura 
na Memória 
union INT_32 U; 
 
U.i = 0xA0B0C0D0; 
 
printf(“\n%0X”,U.c*1+); 
printf(“\n%0X”,U.c*2+); 
printf(“\n%i”,U.c*1+); 
printf(“\n%i”,U.c*2+); 
FF00 
FF01 1101 0000 
FF02 1100 0000 
FF03 1011 0000 
FF04 1010 0000 
FF05 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
c[0] 
c[1] 
i 
c[2] 
c[3] 
U 
Uma Estrutura 
na Memória 
union INT_32 U; 
 
U.i = 0xA0B0C0D0; 
 
printf(“\n%0X”,U.c*1+); 
printf(“\n%0X”,U.c*2+); 
printf(“\n%i”,U.c*1+); 
printf(“\n%i”,U.c*2+); 
FF00 
FF01 1101 0000 
FF02 1100 0000 
FF03 1011 0000 
FF04 1010 0000 
FF05 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
c[0] 
c[1] 
i 
c[2] 
c[3] 
U 
Uma Estrutura 
na Memória 
union INT_32 U; 
 
U.i = 0xA0B0C0D0; 
 
printf(“\n%0X”,U.c*1+); 
printf(“\n%0X”,U.c*2+); 
printf(“\n%i”,U.c*1+); 
printf(“\n%i”,U.c*2+); 
FF00 
FF01 1101 0000 
FF02 1100 0000 
FF03 1011 0000 
FF04 1010 0000 
FF05 
FF06 
FF07 
FF08 
FF09 
FF0A 
FF0B 
FF0C 
FF0D 
FF0E 
FF0F 
FF10 
FF11 
c[0] 
c[1] 
i 
c[2] 
c[3] 
U 
Ponteiros para Uniões 
union INT_32 U, *a; 
 
a = &U; 
 
A->i = 0xA0B0C0D0; 
 
printf(“\n%0X”,a->c[1]); 
printf(“\n%0X”,a->c[2]); 
printf(“\n%i”,a->c[1]); 
printf(“\n%i”,a->c[2]);

Outros materiais