Baixe o app para aproveitar ainda mais
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
Compartilhar