Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Programação II Unidade 2 – Alocação Dinâmica de Memória parte 1.1 Universidade Federal de Santa Catarina Campus Araranguá Daniel Cruz UFSC - ARARANGUÁ 1 1 Podemos entender a memória de um computador como um conjunto de células que armazenam informações. Cada célula da memória possui um endereço (número inteiro de 32 bits). UFSC - ARARANGUÁ 2 Memória do Computador Quando criamos em nosso programa uma variável de um determinado tipo, o Sistema Operacional, ao executar o nosso programa reserva uma posição de memória. Mas ao invés de utilizarmos o endereço da variável como referência, fazemos uso do identificador (nome) que atribuímos a variável. UFSC - ARARANGUÁ 3 Memória do Computador Ponteiros são a ferramenta mais poderosa oferecida pela linguagem C Ponteiros são tipos de dados que referenciam (ou “apontam” para) endereços de memória. Em algumas linguagens com maior abstração, ponteiros não existem expostos ao programador (como em Java) ou tem alternativas mais seguras em outros tipos de dados (como o tipo “referência” em C++). UFSC - ARARANGUÁ 4 Ponteiro Ponteiros são utilizados em situações em que o uso do nome de uma variável não é permitido ou é indesejável. Fornecem maneiras com as quais as funções podem realmente modificar os argumentos que recebem (passagem por referência); Passar matrizes e strings mais convenientemente de uma função para outra (usá-los no lugar de matrizes); Manipular os elementos de matrizes mais facilmente por meio da movimentação de ponteiros, no lugar de índices entre colchetes; Criar estruturas de dados complexas, como listas encadeadas e árvores binárias, em que um item deve conter referências a outro; Alocar e desalocar memória dinamicamente do sistema; Passar para uma função o endereço de outra função. UFSC - ARARANGUÁ 5 Por que os ponteiros são usados? O que são ponteiros? Ponteiros ou Apontadores são tipos de variáveis que armazenam endereços de memória, possivelmente, endereços de memória de outras variáveis. O nome de uma variável indica o que está armazenado nela. O endereço de uma variável é um ponteiro. Seu valor indica em que parte da memória do computador a variável está alocada. Ponteiros proporcionam um modo de acesso à variável sem referenciá-la diretamente (modo indireto de acesso) UFSC - ARARANGUÁ 6 Ponteiro A sintaxe para declarar um ponteiro, é, em C: tipo *ponteiroDeTipo; Como qualquer outro tipo, podemos ter vetores de ponteiros: tipo *vetorDePonteiros[tamanho]; E, como um ponteiro é um tipo, podemos ter ponteiros para ponteiros (ad infinitum): tipo **ponteiroDePonteiroDeTipo; tipo ***ponteiroDePonteiroDePonteiroDeTipo; UFSC - ARARANGUÁ 7 Ponteiros - Definição 7 Para declararmos um ponteiro, basta utilizar o operador *(asterisco) antes do nome da variável. Exemplo: int *p; Ponteiros são tipados, ou seja, devem ter seu tipo declarado e somente podem apontar para variáveis do mesmo tipo. UFSC - ARARANGUÁ 8 Declaração de Ponteiros 8 Para trabalharmos com ponteiros, C disponibiliza os seguintes operadores: & - Fornece o endereço de memória onde está armazenado uma variável. Lê-se “o endereço de”. Utilizado para obter o endereço de uma variável. * - Valor armazenado na variável referenciada por um ponteiro. Lê-se “o valor apontado por”. Pode se comportar de duas maneiras: Quando usado na declaração indica que a variável será um ponteiro. Quando usado na manipulação das variáveis retorna o conteúdo do ponteiro é utilizado para obter o conteúdo do endereço apontado. UFSC - ARARANGUÁ 9 Operadores para Ponteiros 9 Exemplos: int *ptr, nota = 10; ptr = ¬a; nota = *ptr; Declarações das variáveis int m - m guarda um inteiro float n - n guarda um ponto flutuante int *x - x é um ponteiro para um inteiro float *y - y é um ponteiro para um ponto flutuante UFSC - ARARANGUÁ 10 Exemplo Exemplo: int a = 1;1000 1001 1002 1003 UFSC - ARARANGUÁ 11 Ponteiros em Linguagem C 1 Variável Posição a 1000 Exemplo: int a = 1;1000 1001 1002 1003 int *pt_a; UFSC - ARARANGUÁ 12 Ponteiros em Linguagem C 1 Variável Posição a 1000 pt_a 1001 Exemplo: int a = 1;1000 1001 1002 1003 int *pt_a; pt_a = &a; UFSC - ARARANGUÁ 13 Ponteiros em Linguagem C 1 1000 Variável Posição a 1000 pt_a 1001 Exemplo UFSC - ARARANGUÁ 14 Ponteiro Ponteiro UFSC - ARARANGUÁ 15 Exemplo: int *pn, c; c=7; pn=&c; 7 c pn 7 O & (e comercial) é um operador que retorna o endereço de seu operando. A representação em memória do ponteiro fica da seguinte maneira: 7 c 0002 pn 0002 1500 Ponteiro UFSC - ARARANGUÁ 17 Declaração de Ponteiros Para conhecer o endereço ocupado por uma variável, usamos o operador de endereço & O resultado da operação é um ponteiro constante Eis um pequeno programa que mostra o seu uso UFSC - ARARANGUÁ 18 Ponteiros constantes e o operador & UFSC - ARARANGUÁ 19 Exemplos 1 19 UFSC - ARARANGUÁ 20 Exemplos 2 20 UFSC - ARARANGUÁ 21 Exemplo 3 Exemplo 4 UFSC - ARARANGUÁ 22 Exemplo 5 Exemplo 6
Compartilhar