BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/54

Documentos relacionados
BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/61

Aula 25: Alocação Dinâmica

Estruturas (registros)

Estruturas Homogêneas (Vetores)

Aula 23: Ponteiros Introdução a Programação Túlio Toffolo & Puca Huachi

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

C++ BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP

Estruturas II UFOP 1/35

Estruturas Homogêneas II (Matrizes)

Aula 17: Funções (Parte III) e Introdução a Vetores

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

Aula 27: Estruturas heterogêneas e alocação dinâmica

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

Ponteiros. Introdução

Aula 26: Estruturas heterogêneas

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

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.

Estrutura de dados 1. Ponteiros

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

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

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

ESTRUTURA DE DADOS VARIÁVEIS E PONTEIROS

Conceitos Básicos de Programação

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

ANHANGUERA ESTRUTURA DE DADOS AULA 04 MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA. Prof. Thomás da Costa

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

Aula 25: Alocação Dinâmica

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

Estruturas (registros)

Reinaldo Gomes Alocação Dinâmica

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Linguagem C Ponteiros

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

MC-102 Aula 19 Ponteiros II

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Arquivos de Texto UFOP 1/41

Representação de Dados Arrays e Structs

Alocação Dinâmica em C

Procedimentos e Funções

3. Linguagem de Programação C

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Matrizes. Estruturas de Dados Aula 5: Matrizes. Vetor declaração estática. Vetor declaração dinâmica

Programação de Computadores II

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

Aula 29: Arquivos binários

Cadeia de caracteres (strings)

Ponteiros. Considere um carteiro recém-chegado na vila Na vila, a referência para se encontrar a casa é pelo morador

Vetores e Matrizes. Prof. Fabrício Olivetti de França Charles Henrique

Estruturas de Dados Aula 5: Matrizes 23/03/2011

Controle de Fluxo Comandos de repetição

ALOCAÇÃO DINÂMICA DE MEMORIA Lista 10. A linguagem C/C++ possui recursos para alocação dinâmica de memoria.

Programação I Matrizes e Strings. Prof. Carlos Alberto

Estruturas de Dados Aula 5: Matrizes

Cadeia de caracteres (strings)

LINGUAGEM C: ALOCAÇÃO DINÂMICA

Ponteiros de Variáveis

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

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

Aula 06 Introdução à Programação Matrizes

Classes. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho

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

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.

DAS5102 Fundamentos da Estrutura da Informação

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

C++ Orientado a Objetos

Programação II. Aula 1

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

Introdução à Computação

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Procedimentos e Funções

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

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

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

Instituto Federal da Bahia Análise e Desenvolvimento de Sistemas INF029 Laboratório de Programação Aula 03: Ponteiros

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

Estruturas de Dados. Profa. Juliana Pinheiro Campos

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

Princípios de Desenvolvimento de Algoritmos MAC122

Tipos Estruturados. Tipos Estruturados

11a. Aula Ponteiros e Vetores

Linguagem C: Ponteiros. Prof. Tiago Alves de Oliveira

Aula 28: Arquivos de texto

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

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

Programação científica C++

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

3. Linguagem de Programação C

Estruturas II UFOP 1/1

Linguagem C: Ponteiros. Prof. Leonardo Barreto Campos 1

Programação Procedimental GBC /1 Prof. Renan Cattelan Prática 10. Estruturas e alocação dinâmica

Programação: Vetores

Templates. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP

Arrays em Java. Prof. Renato Pimentel. GGI030 Programação Orientada a Objetos. Universidade Federal de Uberlândia Faculdade de Computação

Aula 24 Ponteiros, vetores e structs

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

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

MCTA028 Programação Estruturada Aula 09: - Ponteiros (parte 2)

BCC202 - Estrutura de Dados I

Alocação Dinâmica de Memória

Transcrição:

BCC 201 - Introdução à Programação I Ponteiros Guillermo Cámara-Chávez UFOP 1/54

Ponteiros... I i n t main ( ) { i n t x ; x = 10 cout << " Conteudo de x: " << x ; cout << " Endereco de x: " << &x ; r e t u r n 0 ; } 2/54

Ponteiros... II 3/54

Ponteiros... III 4/54

Ponteiros... IV 5/54

Ponteiros... V 6/54

Ponteiros... VI 7/54

Ponteiros... VII 8/54

Ponteiros... VIII 9/54

Ponteiros... IX 10/54

Ponteiros... X 11/54

Ponteiros... XI 12/54

Ponteiros... XII 13/54

Ponteiros... XIII 14/54

Ponteiros... XIV 15/54

Ponteiros... XV 16/54

Ponteiros... XVI 17/54

Ponteiros... XVII 18/54

Ponteiros... XVIII 19/54

Aritmética de Ponteiros I Uma variável do tipo ponteiro está sempre associada a um tipo Um ponteiro para um dado tipo t endereça o número de bytes que esse tipo t ocupa na memória, i.e., endereça sizeof(t) bytes. Se um ponteiro para uma variável do tipo t for incrementada através do operador ++, automaticamente este ponteiro passará a ter o valor x + sizeof(t) 20/54

Aritmética de Ponteiros II 21/54

Aritmética de Ponteiros III 22/54

Aritmética de Ponteiros IV 23/54

Aritmética de Ponteiros V 24/54

Aritmética de Ponteiros VI 25/54

Aritmética de Ponteiros VII 26/54

Aritmética de Ponteiros VIII 27/54

Aritmética de Ponteiros IX 28/54

Aritmética de Ponteiros X 29/54

Aritmética de Ponteiros XI 30/54

Relação entre ponteiros e vetores I A aritmética de ponteiros é particularmente importante para manipulação de vetores e strings. Quando declaramos um vetor seus elementos são alocados em espaços de memória vizinhos. O nome de um vetor equivale ao endereço do primeiro elemento dele (se um vetor possui nome v, então, v equivale a v[0]. 31/54

Relação entre ponteiros e vetores II i n t main ( ) { c h a r ptr, v [ 3 ] = { a, b, c } ; p t r = v ; cout << "v[0] = " << p t r ; cout << "v[1] = " << (++ p t r ) ; cout << "v[2] = " << (++ p t r ) ; r e t u r n ; } 32/54

Vetores I i n t main ( ) { i n t i, ptr, v [ 3 ] ; p t r = &v [ 0 ] ; // ptr = v; // Usando indices para acessar v f o r ( i = 0 ; i < 3 ; i ++){ c i n >> v [ i ] ; } // Usando ponteiros f o r ( i = 0 ; i < 3 ; i ++, p t r ++){ cout >> p t r ; } r e t u r n 0 ; } 33/54

Alocação Dinâmica de Memória I i n t main ( ) { i n t i, n ; d o u b l e nota = n u l l p t r ; cout << "Entre com o tamanho " ; c i n >> n ; // Aloca 8*n bytes de memoria nota = new d o u b l e [ n ] ; f o r ( i = 0 ; i < n ; i ++){ cout << "Entre a nota: " << i +1 << e n d l ; c i n >> nota [ i ] ; } f o r ( i = 0 ; i < n ; i ++) cout << nota [ i ] << " " ; d e l e t e [ ] nota ; r e t u r n 0 ; } 34/54

Alocação Dinâmica de Memória II Alocação Estática de Memória Alocação Dinâmica de Memória Comando i n t v [ 3 ] ; Reserva 3 espaços de 4 bytes em v v = new i n t [ n ] ; Reserva n espaços de 4 bytes em v Liberação Memória O propio programa ao ser encerrado, se encarrega de liberar a memória alocada. Se não for usar mais a variável v, então, é necessário empregar o comando delete[]. 35/54

Relação entre ponteiros, vetores e matrizes I Assim como é possível alocar memória em tempo de execução para armazenar um vetor, também, é possível construir uma matriz M com m linhas e n colunas. Os comandos para tal tarefa são como dados a seguir: i n t main ( ) { i n t M, i n t m, n, i ; cout << "Entre com m e n" ; c i n >> m >> n ; // Vetor de endereços (os elementos são do tipo char*) M = new i n t [m] ; // Cria para cada endereço um vetor de elementos int f o r ( i = 0 ; i < m; i ++) M[ i ] = new i n t [ n ]... r e t u r n 0 ; } 36/54

Relação entre ponteiros, vetores e matrizes II Vejamos um exemplo: M = new i n t [ 3 ] ; 37/54

Relação entre ponteiros, vetores e matrizes III 38/54

Relação entre ponteiros, vetores e matrizes IV 39/54

Relação entre ponteiros, vetores e matrizes V 40/54

Relação entre ponteiros, vetores e matrizes VI 41/54

Liberação de memória I 42/54

Liberação de memória II 43/54

Liberação de memória III 44/54

Liberação de memória IV 45/54

Exercicios I Inserir n notas de um total de m alunos 46/54

Exercicios II i n t main ( ) { i n t i, j, m, n ; f l o a t M = n u l l p t r ; cout << "Entre com m e n: " ; c i n >> m >> n ; // Aloca m espaços tipo float *. M = new f l o a t [m] ; // Aloca n espaços tipo float, cada M[i]. f o r ( i = 0 ; i < m; i ++) M[ i ] = new f l o a t [ n ] ; // Preenchendo a matriz M usando índices: M[i][j]. f o r ( i =0; i < m; i ++) { cout << "Aluno: " << i +1 << e n d l ; f o r ( j =0; j < n ; j ++) { cout << " Nota " << j +1; c i n >> M[ i ] [ j ] ; } }... } 47/54

Exercicios III }... // Impressão dos elementos de M, empregando ponteiros. f o r ( i =0; i < m; i ++) { f o r ( j =0; j < n ; j ++) cout << M[ i ] [ j ] <<" " ; cout << e n d l ; } // Liberação de memória. // Liberando m vetores de tamanho n. i f (M!= n u l l p t r ){ f o r ( i =0; i < m; i ++) i f (M[ i ]!= n u l l p t r ) d e l e t e [ ] M[ i ] ; // Liberando o vetor de ponteiros // de tamanho m. d e l e t e [ ] M; } r e t u r n 0 ; 48/54

Ponteiros: Passagem por valor e por referência I Criar uma estrutura empregrado com os seguintes campos: nome salario sexo Inserir n empregados (criar um vetor dinâmico) 49/54

Ponteiros: Passagem por valor e por referência II t y p e d e f s t r u c t Pessoa { s t r i n g nome ; d o u b l e s a l a r i o ; c h a r s e x o ; }PE ; v o i d I n s e r e (PE, i n t ) ; v o i d P r i n t (PE, i n t ) ; i n t main ( ) { i n t n ; PE t r a b = NULL ; cout << " Quantidade de pessoas " ; c i n >> n ; t r a b = new PE [ n ] ; I n s e r e ( trab, n ) ; P r i n t ( trab, n ) ; i f ( t r a b!= n u l l p t r ) d e l e t e [ ] t r a b ; r e t u r n 0 ; } 50/54

Ponteiros: Passagem por valor e por referência III v o i d I n s e r e (PE vet, i n t n ){ i n t i, v a l o r e s ; f o r ( i = 0 ; i < n ; i ++) { cout << " Cadastro numero " << i +1 << e n d l ; cout << "Insere nome: " ; g e t l i n e ( cin, v e t [ i ]. nome ) ; do{ cout << "Insere salario : " ; c i n >> v e t [ i ]. s a l a r i o ; i f ( c i n. f a i l ( ) ){ cout << "Nao eh um numero \n" ; c i n. c l e a r ( ) ; c i n. i g n o r e (100, \n ) ; } e l s e b r e ak ; } w h i l e ( t r u e ) ; cout << "Insere sexo: " ; c i n >> v e t [ i ]. s e xo ; c i n. i g n o r e ( n u m e r i c l i m i t s <s t d : : s t r e a m s i z e >:: max ( ), \n ) ; } } 51/54

Ponteiros: Passagem por valor e por referência IV v o i d P r i n t (PE vet, i n t n ) { i n t i ; f o r ( i = 0 ; i < n ; i ++) { cout << v e t [ i ]. nome << v e t [ i ]. s a l a r i o << v e t [ i ]. s e x o << e n d l ; } } 52/54

Exercicios em Propostos I 1. Defina uma função que retorne a transposta de uma matriz x de dimensão lin col. i n t T r a n s p o s t a ( i n t M, i n t l i n, i n t c o l ) 2. Elaborar um programa para calcular a méda aritmética de dois valores reais utilizando apenas variáveis do tipo ponteiro. 53/54

FIM 54/54