Ponteiros. Baseado nos slides do Prof. Mauro.

Documentos relacionados
Algoritmos e Estruturas de dados

1/34 GESTÃO DINÂMICA DE MEMÓRIA

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Ponteiros. prof. Fabrício Olivetti de França

Ponteiros e Alocação de Memória

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Linguagem C Ponteiros

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores

Alocação Dinâmica em C

Princípios de Desenvolvimento de Algoritmos MAC122

Aula 17: Ponteiros e Alocação Dinâmica em C

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

Programação Estruturada

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Ponteiros e Tabelas. K&R: Capítulo 5

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

Alocação Dinâmica de Memória. Programação II

1 Exercícios com ponteiros

Alocação Dinâmica. Introdução à Computação

Algoritmos e Estruturas de Dados I (DCC/003) Variável Indexada Vetor

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Aula 25: Alocação Dinâmica

1 Exercícios com ponteiros

Linguagem C. Ponteiros. Alex Vidigal Bastos.

A sintaxe para se declarar uma variável do tipo ponteiro é dada por:

Estruturas de Dados. Profa. Juliana Pinheiro Campos

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio

Curso de Programação C em Ambientes Linux Aula 05

O que é um apontador em C (type pointer in C)?

Ponteiros em C. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1

Reinaldo Gomes Alocação Dinâmica

A linguagem C permite dois tipos de alocação de memória: Alocação estática e alocação dinâmica.

Ponteiros & tabelas (cont.) K&R: Capítulo 5

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

AULA 6. Conceitos. Melhores momentos. Conceitos. Conceitos. Conceitos. Conceitos

Ponteiros. Introdução

11a. Aula Ponteiros e Vetores

DAS5102 Fundamentos da Estrutura da Informação

ponteiros INF Programação I Prof. Roberto Azevedo

BCC202 - Estrutura de Dados I

Linguagem C: Ponteiros - Alocação Dinâmica

Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória

Computação 2. Aula 7. Profª. Fabiany Ponteiros

Métodos Computacionais. Vetores e Matrizes Dinâmicas

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

Aula 07: - Mapa de memória de um processo - Ponteiros (parte 1)

MC-102 Aula 19 Ponteiros II

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

13. ALOCAÇÃO DINÂMICA DE MEMÓRIA

Módulo 5 Vetores e Alocação Dinâmica

Métodos Computacionais. Tipos Estruturados

Aula 18: Funções em C

SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio

Alocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória

Apontadores/ponteiros

Programação de Computadores II. Cap. 5 Vetores

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Aula 24: Ponteiros e Alocação Dinâmica

Introdução à Programação

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Ponteiros e Alocação Dinâmica em C. Fonte: DCC UFMT (modificado)

Ponteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

- Mapa de memória de um processo - Ponteiros

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Programação: Vetores

ESTRUTURA DE DADOS (TCC )

Programação de Computadores II

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

5. Vetores e alocação dinâmica

3. Linguagem de Programação C

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Gilberto A. S. Segundo. 24 de agosto de 2011

Linguagem de Programação I. Aula 08 Linguagem C: Arrays

Professora Jeane Melo

Aula 24 Ponteiros, vetores e structs

Estrutura de dados 1. Ponteiros

Programação de Computadores II. Cap. 5 Alocação Dinâmica

Programação de Computadores II. Cap. 7 Cadeias de Caracteres

Ponteiros. Embora o programador não tenha acesso ao endereço de uma variável, existem algumas situações onde é necessário a utilização deste endereço.

Introdução à Programação C

Programação. Cap. 12 Gestão de Memória Dinâmica

Programação Computacional Aula 16: Alocação Dinâmica de Memória

Funções em Linguagem C Parte II

Ponteiro. Ponteiro. Objetivo. Compreender a definição e dominar a implementação de ponteiros em C.

Laboratório de Introdução à Ciência da Computação I

Ponteiros e Alocação Dinâmica. Prof. Péricles Miranda

Transcrição:

Baseado nos slides do Prof. Mauro.

A memória do computador é uma sequência de bytes, na qual endereçamos cada um sequencialmente. Como vimos, uma variável é uma região da memória que reservamos para armazenar um dado, por exemplo: int a; Reservamos 4 bytes (em geral) para armazenar um número inteiro. char c; Reservamos byte para armazenar um caractere. 2

são variáveis que armazenam um endereço de memória, por exemplo: int *a; Reservamos 4 bytes (máquina 32 bits) para armazenar um endereço de memória. Neste endereço de memória estará armazenado um número inteiro (em geral, 4 bytes). char *c; Reservamos 4 bytes (máquina 32 bits) para armazenar um endereço de memória. Neste endereço de memória estará armazenado um caractere ( byte). 3

Todas as variáveis tem um endereço, que podemos obter pelo operador & (não confundam com o &&), por exemplo: int a; int *b; a = 0; b = &a; A variável b contém o endereço da variável a, que, por sua vez, contém o número 0. 4

char c; char *d; c = 'a'; d = &c; A variável d contém o endereço da variável c, que por sua vez contém o caractere a. Observe que, quando declaramos um ponteiro, não estamos reservando espaço para armazenar um dado, estamos apenas reservando espaço da memória para armazenar um endereço. 5

O valor especial NULL (precisamos da stdlib.h) signifca que não apontamos para nenhum endereço. Por exemplo: int *a; a = NULL; O ponteiro a está sendo declarado, mas a não aponta (neste momento) para nenhum endereço de memória. 6

Importante: em C, o operador * tem diversas funções, dependendo do seu contexto: Caso : int a, b, c; a = 0; b = 20; c = a * b; O operador *, neste caso, signifca multiplicação. 7

Caso 2: int *a; a = NULL; O operador *, neste caso, signifca que queremos declarar um ponteiro. Caso 3: int a, *b; b = &a; *b = 0; Neste caso, o conteúdo de b recebe 0. 8

Exemplo: int main() { int a, b, *c, d; a = 0; b = 20; c = &a; d = a + b; printf( %d\n, d); *c = 30; d = *c + b; printf( %d, d); d = a + b; printf( %d, d); return(0); 9

Exemplo: void troca(int *a, int *b) { int temp = *a; *a = *b; *b = temp; return; int main() { int a, b; a = 0; b = 20; printf( %d e %d\n, a, b); troca(&a, &b); printf( %d e %d\n, a, b); return(0);

Assim como não faz sentido deixarmos de inicializar uma variável comum: int a; printf( %d\n, a); Também não faz sentido utilizar um ponteiro sem inicializá-lo: int *a; printf( %d\n, *a);

Temos que tomar um cuidado adicional com ponteiros: ele pode ter sido inicializado, mas inicializado com o valor NULL, logo não podemos fazer: int *a; a = NULL; printf( %d, *a); É muito comum o uso de if para verifcar se um ponteiro possui o valor NULL ou não, para só então utilizá-lo.

Alocação dinâmica Podemos fazer um ponteiro apontar para qualquer variável comum: int a, *p; a = 0; p = &a;

Alocação dinâmica Também podemos apontar para um bloco de memória que reservamos, por exemplo: int main() { int *a; a = (int*) malloc( sizeof(int) ); free(a); a = NULL; return(0);

Alocação dinâmica Cuidados: Quando usamos memória alocada dinamicamente, não podemos esquecer de desalocar estas memórias! Dica: cada malloc tem que ter um free correspondente! Depois que desalocamos um bloco de memória, não podemos mais utilizá-lo, embora o ponteiro ainda contenha o endereço da memória utilizada! Dica: depois que chamar free(ponteiro), faça: ponteiro=null;

Vetores Podemos alocar blocos de qualquer tamanho: Exemplo : int main() { int a[00]; a[50] = ; return(0);

Vetores Exemplo 2: int main() { { int *a; a = (int*) malloc( sizeof(int)*00 ); a[50] = ; free(a); a = NULL; return(0);

#include <stdio.h> #include <stdlib.h> Vetores void ler(int n, int *vetor) { int i; for(i=0;i<n;i++) scanf( %d, &vetor[i]); return; void imprimir(int n, int *vetor) { int i; for(i=0;i<n;i++) printf( %d, vetor[i]); printf( \n ); return; int main() { int *a; a = (int*) malloc( sizeof(int)*00 ); if (a == NULL) { return(-); ler(00, a); imprimir(00, a); free(a); a = NULL; return(0);

Matrizes Exemplo : int main() { int a[00][30]; a[50] [5] = ; return(0);

Matrizes Exemplo 2: #include <stdlib.h> int main() { int **a, i; a = (int**) malloc( sizeof(int*)*00 ); if ( a == NULL ) return(-); for(i=0; i<00; i++) { a[i] = (int*) malloc( sizeof(int)*30 ); if ( a[i] == NULL ) return(-); a[50][5] = ; for(i=0; i<00; i++) { free(a[i]); a[i] = NULL; free(a); a = NULL; return(0); 2