Buscar

Aula 6 - Alocação Dinamica Parte III

Prévia do material em texto

Laboratório de 
Programação
Alocação Dinâmica - Parte III
Prof. Daniel Vecchiato
daniel@ic.ufmt.br
quarta-feira, 20 de março de 2013
Conteúdo Abordado
• Tipo de dados;
• Algoritmos em C e Pascal;
• Estruturas de controle;
• Estruturas de repetição;
• Variáveis compostas homogêneas;
• Variáveis compostas heterogêneas;
• Modularização: Blocos e Subprogramas;
• Parâmetros e formas de passagem;
• Recursividade;
• Operações com Arquivos.
quarta-feira, 20 de março de 2013
Conteúdo a ser 
abordado
• Ponteiros;
• Alocação dinâmica;
• Estruturas de dados dinâmicas: listas 
lineares;
• Métodos simples de ordenação e pesquisa 
de dados.
quarta-feira, 20 de março de 2013
Agenda
• Revisão;
• Alocação dinâmica de Matrizes;
• Exercícios.
quarta-feira, 20 de março de 2013
Revisão
Ponteiros para Registros
• Para acessar os campos de uma variável do tipo struct via 
ponteiro, pode-se utilizar o operador “*” juntamente com 
o operador “.”.
• Ou, pode-se utilizar o operador “- >”
quarta-feira, 20 de março de 2013
Revisão
Ponteiros para Registros
quarta-feira, 20 de março de 2013
Revisão
Alocação Dinâmica
• Na biblioteca stdlib.h existem duas funções 
para fazer alocação de memória.
• calloc: Nesta função são passados como 
parâmetro o número de blocos de memória a 
serem alocados e o tamanho em bytes de 
cada bloco.
• malloc: Nesta função é passado um único 
argumento, o número de bytes a serem 
alocados.
quarta-feira, 20 de março de 2013
Revisão
Alocação Dinâmica
• calloc
• malloc:
quarta-feira, 20 de março de 2013
Revisão
Alocação Dinâmica
• Diferenças: O calloc zera todos os bits 
da memória alocada enquanto o malloc 
não. Logo se não for desejável uma 
inicialização (com zero) da memória 
alocada, o malloc é preferíver por ser um 
pouco mais rápido.
quarta-feira, 20 de março de 2013
Revisão
Alocação Dinâmica
• Além do calloc e do malloc, existe a 
função free na biblioteca stdlib.h
• free: Esta função recebe como 
parâmetro um ponteiro, e libera a 
memória previamente alocada.
• TODA memória alocada durante a 
execução de um programa, deve ser 
desalocada quando não for mais utilizada.
quarta-feira, 20 de março de 2013
Alocação Dinâmica
Matrizes
• Em aulas passadas, o tamanho das matrizes 
era definido de forma fixa.
• Em situações reais o ideal é alocar 
memória suficiente para conter os dados a 
serem tratados.
• Como alocar vetores multidimensionais 
dinamicamente? 
quarta-feira, 20 de março de 2013
Ponteiros para 
ponteiros
• Uma variável ponteiro está alocada na 
memória do computador como qualquer 
outra variável.
• Pode-se criar um ponteiro que contém o 
endereço de memória de um outro 
ponteiro.
quarta-feira, 20 de março de 2013
Ponteiros para 
ponteiros
• Para criar um ponteiro para ponteiro: tipo 
**nomePonteiro;
quarta-feira, 20 de março de 2013
Ponteiros para 
ponteiros
• O Programa imprime 5 três vezes, 
mostrando as três formas de acesso à 
variável a: a, *b, **c.
quarta-feira, 20 de março de 2013
Ponteiros para 
Ponteiros
• Como mostrado anteriormente, um 
ponteiro pode ser usado para referenciar 
um vetor alocado dinamicamente.
quarta-feira, 20 de março de 2013
Ponteiros para 
Ponteiros
• A mesma coisa acontece com um ponteiro 
para ponteiro, só que neste caso o vateor 
alocado é de ponteiros.
Cada posição do vetor é do tipo int *, ou seja, um ponteiro para inteiro
quarta-feira, 20 de março de 2013
Ponteiros para 
ponteiros
• Como cada posição do vetor é um 
ponteiro para inteiro, podemos associar 
cada posição dinamicamente com um vetor 
de inteiros.
quarta-feira, 20 de março de 2013
Ponteiros para 
ponteiros
quarta-feira, 20 de março de 2013
Alocação Dinâmica de 
Matrizes
• A forma para se criar matrizes 
dinamicamente é utilizando ponteiro para 
ponteiro.
• No exemplo anterior foi criada uma matriz 
de 5 linhas e 3 colunas.
quarta-feira, 20 de março de 2013
Exercício
• XXVII - Faça um programa que aloque uma 
matriz dinamicamente, leia seus valores, 
imprima a matriz e depois desaloque a 
memória utilizada.
quarta-feira, 20 de março de 2013
Exercício
• XXVIII - Crie um programa que multiplica 
duas matrizes quadradas do tipo int lidas 
do teclado. O programa deve ler a 
dimensão n da matriz, em seguida alocar 
dinamicamente duas matrizes n x n. Depois 
ler os dados das duas matrizes e imprimir a 
matriz resultante da multiplicação destas.
quarta-feira, 20 de março de 2013

Continue navegando