Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Linguagem de Programação II Parte IX
Professora: Flávia Balbino da Costa
2
Conteúdo Programático:
Revisão (estruturas de decisão e repetição, procedimentos e funções ) Trabalhando com a Linguagem C Estrutura de dados homogêneas I - vetores Estrutura de dados homogêneas II - matrizes Estrutura de dados heterogêneas – registros Funções Ponteiros e alocação dinâmica Arquivos
3
Ponteiros e Alocação Dinâmica
Um ponteiro é simplesmente um endereço, ou melhor, uma variável ponteiro é uma variável cujo objetivo é armazenar um endereço. A denominação de ponteiro vem exatamente da ideia de que uma variável que armazena um endereço é uma variável que indica (aponta para) uma outra posição de memória.
4
Ponteiros e Alocação Dinâmica
Na linguagem C, para se declarar uma variável ponteiro devemos também definir qual o tipo do valor que ficará armazenado na área de memória, cujo endereço será armazenado pela variável ponteiro. O formato da sua declaração é a seguinte: tipo VARIAVEL
5
Ponteiros e Alocação Dinâmica
A questão agora é a seguinte: para que precisamos de uma variável que guarde um endereço de memória? A resposta então é a seguinte: em diversos tipos de aplicações, temos que lidar um conjunto de dados que não sabemos a sua quantidade e, na maioria das vezes, simplesmente não há um limite máximo!
6
Ponteiros e Alocação Dinâmica
Já estudamos que, quando queremos armazenar um conjunto grande de informações em nosso programa, a saída é trabalharmos com vetores. No entanto, o tamanho de um vetor, pelo menos na forma que vimos até o momento, é definido no instante em que o programa está sendo escrito e, nesses casos citados, a quantidade de valores só passa a ser conhecida no momento em que o programa já está sendo executado!
7
Ponteiros e Alocação Dinâmica
A solução para esse impasse é exatamente reservar a área de memória no instante da execução do programa. Tal prática, permitida na maioria das linguagens utilizadas atualmente, é conhecida como alocação dinâmica. A alocação dinâmica consiste em reservar espaço na memória através de comandos à medida que se houver a necessidade de se armazenar mais informações em seu programa.
8
Ponteiros e Alocação Dinâmica
O limite é, obviamente, a quantidade de memória física disponível na máquina. Só que tais áreas de memórias nem sempre serão as mesmas a cada execução do programa. Portanto, para a aplicação correta de tal técnica, ao se reservar uma área de memória, temos que guardar em que local da memória (ou seja, o endereço) ficará tal área. E para guardar endereço o que temos? Resposta: variáveis ponteiros.
9
Ponteiros e Alocação Dinâmica
Em C, como existe a relação, já citada, de vetores com endereços, é muito mais comum a utilização de vetores dinâmicos, isto é, vetores que terão o seu tamanho determinado durante a execução do seu programa. O tamanho inclusive poderá ser o valor de uma variável inteira, já que a reserva de espaço será feita através de um comando.
10
Ponteiros e Alocação Dinâmica
Para se reservar uma área de memória em C, temos o comando malloc, da biblioteca stdlib.h, cujo objetivo é reservar uma área de memória do tamanho em bytes determinado pelo programador. A sua utilização é, normalmente feita do seguinte modo: tipo VAR; ... VAR = (tipo ) malloc (n sizeof(tipo));
11
Ponteiros e Alocação Dinâmica
Onde: tipo é: o tipo de cada elemento do vetor; n é o tamanho do vetor. A função sizeof é uma função do C para obter quantos bytes uma variável (neste caso, um elemento do vetor) do tipo especificado entre parênteses ocupará na memória.
12
Ponteiros e Alocação Dinâmica
Tal operação, sendo realizada com sucesso, reserva uma área de memória cujo endereço inicial será armazenado em VAR. Portanto, o mesmo significado de vetor. Deste modo, VAR poderá ser utilizada normalmente como um vetor de tamanho n.
13
Ponteiros e Alocação Dinâmica
Um detalhe importante é que nem sempre poderá haver uma área de memória do tamanho que se deseja disponível para ser reservada. Se isto ocorrer, o comando malloc atribui a VAR a indicação de endereço nulo, que em C é representado pela constante NULL. Portanto, é sempre conveniente testarmos, após a chamada de um comando malloc, se a variável VAR é igual a NULL.
14
Ponteiros e Alocação Dinâmica
Veja a seguir como normalmente isto é feito: tipo VAR; ... VAR = (tipo ) malloc (n sizeof(tipo)); if (VAR == NULL) { Tratamento de erro }
15
Ponteiros e Alocação Dinâmica
ou de forma simplificada: tipo VAR; ... if ( (VAR = (tipo ) malloc (n sizeof(tipo))) == NULL) { Tratamento de erro }
16
Ponteiros e Alocação Dinâmica
Outro detalhe do qual devemos lembrar é que em alocação dinâmica, do mesmo modo que alocamos memória a medida que for necessário, devemos liberar as áreas de memória que não forem mais necessárias.
17
Ponteiros e Alocação Dinâmica
Isto é feito através do comando free, simplesmente do seguinte modo: free(VAR); Onde VAR é variável que recebeu o resultado do comando malloc, caso a alocação tenha sido feita com sucesso, é claro.
18
Ponteiros e Alocação Dinâmica
Vejamos a seguir dois exemplos da utilização de vetor dinâmico, similares aos já vistos anteriormente com vetor estático, e reparem como a sua utilização, após a sua criação, é idêntica à de um vetor estático.
19
Exemplo 1: Faça um programa em C que leia inicialmente a quantidade de alunos de uma turma, depois as notas de cada aluno desta turma e informe a sua média, utilizando uma função para o cálculo da média.
20
Solução – parte 1:
21
Solução – parte 2:
22
Exemplo 2: Faça um programa em C que leia inicialmente a quantidade de alunos de uma turma, depois leia os nomes e as notas das duas provas de cada aluno, calcule a média de cada um deles e liste na tela todos os dados de todos os alunos em ordem alfabética crescente. Utilize uma função para fazer a ordenação do vetor.
23
Solução – parte 1:
24
Solução – parte 2:
25
Solução – parte 3:
26
Solução – parte 4:
27
Exercícios: Um determinado paciente permaneceu internado em um hospital em um período de tempo. Durante sua internação vários procedimentos foram efetuados. Para cada procedimento, as seguintes informações foram armazenadas no sistema: Nome do procedimento; Valor do procedimento; Tempo de execução do procedimento (em dias);
28
Exercícios: Faça um programa em C que leia inicialmente a quantidade de procedimentos que foram realizados. Depois apresente como resultado: As informações de cada procedimento (mostrar normalmente); A quantidade total de dias que ele ficou internado; e O valor total que ele deverá pagar no momento de sua alta. OBS: Utilize duas funções para calcular os totais de a e b.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.