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

Documentos relacionados
Programação Estruturada

Reinaldo Gomes Alocação Dinâmica

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

Alocação Dinâmica em C

Ponteiros. Baseado nos slides do Prof. Mauro.

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

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

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

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

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

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

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

INF 1007 Programação II

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

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

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

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

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

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

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

5. Vetores e alocação dinâmica

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

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

11a. Aula Ponteiros e Vetores

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

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 7 Arrays. Arrays

Ponteiros e Alocação de Memória

Estruturas de Dados. Profa. Juliana Pinheiro Campos

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

Linguagem C. Ponteiros. Alex Vidigal Bastos.

Carlos Eduardo Batista. Centro de Informática - UFPB

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

Linguagem C. André Tavares da Silva.

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

Introdução à Programação

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

Estrutura de dados 1. Ponteiros

Tipos Abstratos de Dados. Estrutura de Dados

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

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

ECT1203 Linguagem de Programação

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

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

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

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

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

DAS5102 Fundamentos da Estrutura da Informação

Princípios de Desenvolvimento de Algoritmos MAC122

Ponteiros. Introdução

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros

Aula 24 Ponteiros, vetores e structs

Introdução a Programação de Jogos

Programação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto

Métodos Computacionais. Tipos Estruturados

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

Modulo 12: alocação dinâmica de memória

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

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória.

Funções em Linguagem C Parte II

Variáveis e Operadores em C

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

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

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

LINGUAGEM C: ALOCAÇÃO DINÂMICA

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

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

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

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

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

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

USP-ICMC-BInfo. Ponteiros em C. SCC501 - ICC-II 2011 Prof. João Luís

Estrutura de Dados. Aula 07 Alocação Dinâmica

Alocação Dinâmica de Memória - Exercício

ESTRUTURA DE DADOS (TCC )

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

Algoritmos e Estruturas de dados

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Programação de Computadores I Funções na Linguagem C PROFESSORA CINTIA CAETANO

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

Ponteiros. Introdução e Alocação Dinâmica

Programação de Computadores II

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

19 - Ponteiros em C Parte 1

Matrizes em C. Lucas Ferrari de Oliveira Professor Adjunto. Universidade Federal do Paraná

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

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

INTRODUÇÃO À LINGUAGEM C. Prof. Msc. Luis Filipe Alves Pereira 2015

Introdução à Linguagem C Variáveis e Expressões

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

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

ponteiros INF Programação I Prof. Roberto Azevedo

Transcrição:

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

2 Agenda Ponteiros Conceitos gerais O que é Ponteiro? Declaração de Ponteiros Operadores para Ponteiros Exemplos Exercícios Passagem de argumento por valor Passagem de argumento por referência Alocação Dinâmica de Memória

PONTEIROS 3

4 Conceitos Gerais (1/2) Três propriedades que um programa deve manter quando armazena dados: onde a informação é armazenada; que valor é mantido lá; que tipo de informação é armazenada. A definição de uma variável simples obedece a estes três pontos. A declaração provê o tipo e um nome simbólico para o valor. Faz também que o programa aloque memória para o valor e mantenha o local internamente.

5 Conceitos Gerais (2/2) Como obter o endereço de uma variável na memória? Aplique o operador de endereço, &, a uma variável para pegar sua posição. Exemplo:

6 O que é Ponteiro? Ponteiros são variáveis que guardam um endereço de memória. int guarda inteiros. float guarda números decimais. char guarda caracteres. Na Linguagem C, quando declaramos ponteiros devemos informar o tipo de variável que será apontada.

7 Declaração de Ponteiros (1/2) Declaração tipo *variavel; Exemplos: char int float *ch; *i; *num; O asterisco (*) que faz o compilador saber que aquela variável não vai guardar um valor, mas sim um endereço para aquele tipo especificado.

Declaração de Ponteiros (2/2) 8

9 Operadores para Ponteiros Para trabalharmos com ponteiros, a Linguagem C disponibiliza os seguintes operadores: & Retorna o endereço de memória onde está armazenado uma variável. Lê-se o endereço de. * O Valor armazenado na variável referenciada por um ponteiro. Lê-se o valor apontado por.

10 Exemplo 1: Operador &: retorna o endereço de memória de seu operando. int count; int *m; count = 5; Variável Endereço Memória count 1001 5 m 1200? m = &count; Variável Endereço Memória count 1001 5 m 1200 1001

11 Exemplo 2: Operador *: O valor da variável localizada no endereço de seu operando. Variável Endereço Memória int count,q; int *m; count = 5; m = &count; q = *m; count 1001 5 m 1200 1001 q 1007? Variável Endereço Memória count 1001 5 m 1200 1001 q 1007 5

12 Exemplo 3 /*declaração das variáveis */ int *p, num; /* num recebe o valor 5 */ int num = 5; Variável Memória p num - 5 Endereço 206 202 /* p recebe o endereço de memória de num */ p = &num; p num 202 5 206 202 /* conteúdo de p recebe o valor 8 */ p 202 206 *p = 8; num 8 202

13 Valor de x? #include "stdafx.h" #include <stdio.h> #include <conio.h> int main(void){ int x; int *i; x = 23; i = &x; *i = 19; printf("x = %d",x); } return 0;

Passagem de Argumentos por Valor 14

15 Passagem de Argumentos por Valor Quando passamos argumentos a uma função, os valores fornecidos são copiados para as variáveis da função. Desta forma, alterações nos parâmetros dentro da função não alteram os valores que foram passados. Exemplos:

Passagem de Argumento por Referência 16

17 Passagem de Argumentos por Referência (1/3) No exemplo acima, se x e y fossem passados por referência, seu conteúdo seria trocado.

18 Passagem de Argumentos por Referência (2/3) Alternativa: Passar como argumento para uma função o endereço da variável, e não o seu valor. Desta forma podemos alterar o conteúdo da variável fazendo passagem por referência. Exemplo:

19 Passagem de Argumentos por Referência (3/3) Função scanf ( %d,&variavel);

Alocação de Memória 20

21 Conceitos Gerais A alocação de memória, permite criar variáveis em tempo de execução, ou seja, alocar memória para novas variáveis em tempo de execução. Proporciona uma melhor utilização da memória da máquina, pois quando criada em tempo de execução não é necessária a utilização de memória adicional. As funções de alocação dinâmica são muito eficiente para a implementação de arranjos e estruturas de dados. Esta é outra ferramenta que mostra o poder da Linguagem C.

22 Função Malloc Serve para alocar memória, ou seja, reserva um numero especifico de memoria, dependendo do tipo do ponteiro que chama a função. Sintaxe: (tipo*)(malloc(sizeof(tipo))); A função malloc reserva o número de bytes que queremos alocar na memória e retorna um ponteiro void * para o primeiro byte alocado. O ponteiro void * pode ser atribuído a qualquer tipo de ponteiro. Lembre-se que cada tipo de dados possui um numero reservado de byte. Se não houver memória suficiente para alocar a memória requisitada a função malloc() retorna um ponteiro nulo.

23 Exemplo de Alocação de um tipo int (1/2) int *p = (int*)(malloc(sizeof(int); Foi declarado um ponteiro p do tipo int, e alocado um endereço de memória (4 bytes). A primeira referência ao tipo (int *) na instrução esta relacionada a variável de retorno, ou seja, a variável que chama a função malloc, um ponteiro do tipo int. A primeira referência ao tipo (int) na instrução esta relacionada a alocação solicitada, ou seja, uma solicitação de endereço de tamanho int.

24 Exemplo de Alocação de um tipo int (2/2) #include <stdio.h> #include <stdlib.h> int main (void){ int *p; p=(int *)malloc(sizeof(int)); if (!p){ printf ("** Erro: Memoria Insuficiente **"); exit; }else{ printf ("** Memoria Alocada com Sucesso **"); } return 0; }