Introdução a Ponteiros e Vetores em C

Documentos relacionados
Ponteiros. Ponteiros. Ponteiros. Ponteiros. Ponteiros. Introdução a Programação. Profa. Roseli Romero

Ponteiros. um ponteiro é uma variável que contém o endereço um dado declaração: * indica que a variável é um ponteiro. Ex: tipo_dado *nome_ponteiro;

Curso C: Ponteiros e Arrays

Mais sobre Ponteiros em C

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

LINGUAGEM C: PONTEIROS

Alocação Dinâmica em C

Vetores e matrizes. MCTA028 Programação Estruturada. Material preparado a partir de slides dos profs. Jesús Mena-Chalco e Fabrício Olivetti

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

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Estrutura de dados 1. Ponteiros

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Estruturas em C

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

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

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

ponteiros INF Programação I Prof. Roberto Azevedo

Linguagem C: Ponteiros. Prof. Tiago Alves de Oliveira

Linguagem C: Ponteiros. Prof. Leonardo Barreto Campos 1

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

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

Aula 20 - Ponteiros. Prof. Laura Silva de Assis. Engenharia de Computação. CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca

RESUMO DE CONCEITOS BÁSICOS DE C

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

Estruturas. struct são coleções de dados heterogêneos agrupados em uma mesma estrutura de dados. Ex: armazenar as coordenadas (x,y) de um ponto:

Tipos Abstratos de Dados. Estrutura de Dados

3. Linguagem de Programação C

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

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

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

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

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

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Funções em Linguagem C Parte II

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

LINGUAGEM C: ARRAY: VETORES E MATRIZES

Vetores e Strings. 6. Comandos de entrada e saída formatada que trabalham sobre strings

Dados Estruturados Vetores e Matrizes. SCC120 - Introdução à Ciência de Computação

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

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

prim = A ; prim = &A[0];

Programação: Vetores

É o asterisco (*) que faz o compilador saber que aquela variável não vai guardar um valor e sim um endereço para aquele tipo especificado.

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

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

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

Aula 08: Funções (Parte II)

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.

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Recursão em C

Programação II. Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio

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

Nomes de variáveis Todo nome de variável deve iniciar com uma letra ou sublinha _.

Apontadores/ponteiros

Programação Estruturada

11a. Aula Ponteiros e Vetores

Módulo 1. Introdução. AEDS I C++ (Rone Ilídio)

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

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

Aula 25: Alocação Dinâmica

19 Vetores, Ponteiros e Funções

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

Linguagem C (continuação)

3. Linguagem de Programação C

Variáveis e Operadores em C

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

1ª Lista de Exercícios

Linguagem C Ponteiros

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Material preparado pela profa Silvana Maria Affonso de Lara

Declarando e Utilizando Ponteiros. Para declarar um ponteiro temos a seguinte forma geral: tipo_do_ponteiro *nome_da_variável;

Introdução à Computação MAC0110

Arranjos: parâmetros, matrizes.

Conceitos básicos de programação

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

Básico: estrutura de programa, sintaxe Interface com linha de comando

Arranjos. David Déharbe

UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

Vetores Unimensionais

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

Introdução a Programação. Ponteiros para Estruturas, Outros Tipos de Estruturas

10 a Aula - Operadores de Molde ( Casting ). Atribuição de Memória. Ponteiros. Enumerados. Mestrado em Engenharia Física Tecnológica

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

a) Implemente uma função que retorne uma aproximação do valor de π, de acordo com a F órmula de Leibniz: ( 1)

Introdução à Computação

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

1 Exercícios com ponteiros

C Operadores e Expressões

Cláudio C. Rodrigues Faculdade de Computação - UFU

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

Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos

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

Revisão para Prova 2. Mirella M. Moro

Vetores são estruturas indexadas utilizadas para armazenar dados de um mesmo tipo: int, char, float ou double. Oexemploaseguirédeumvetordeinteiros:

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

Reinaldo Gomes Alocação Dinâmica

Estruturas Dinâmicas - Ponteiros Parte I

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Transcrição:

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Introdução a Ponteiros e Vetores em C Material preparado pela profa Silvana Maria Affonso de Lara e utilizado por outros professores (Rosana Vaccari) 2º semestre de 2010

ROTEIRO DA AULA Definição de ponteiros Como utilizar ponteiros Exemplos de ponteiros Definição de Arrays Como referenciar arrays Como referenciar elementos Operações válidas sobre ponteiros 2

PONTEIROS um ponteiro é uma variável que contém um endereço declaração: * indica que a variável é um ponteiro Ex: int x; tipo_dado *nome_ponteiro; int *px; /* compilador sabe que px é ponteiro */ /* px é um ponteiro para inteiro */ 3

PONTEIROS o operador & quando aplicado sobre uma variável retorna o seu endereço Ex: int x = 10, *pi; pi = &x; printf( &x: %p pi: %p, &x, pi); => &x: 0x03062fd8 pi: 0x03062fd8 4

PONTEIROS o operador * quando aplicado sobre um ponteiro retorna o dado apontado Ex: void main () { int *tmp_ptr; int x, y; x = 10; tmp_ptr = &x; y = *tmp_ptr; /* (*tmp_ptr) = 10 */ } 0xABA0 0xABA2 0xABA0 10 10 tmp_ptr x y 5

PONTEIROS ponteiros são variáveis tipadas: (int *) (float *) (char *) Ex: main() { int *ip, x; float *fp, z; ip = &x; /* OK */ fp = &z; /* OK */ ip = &z; /* erro */ fp = &x; /* erro */ } 6

PONTEIROS espaço ocupado pelas variáveis 1 byte 1 byte (int *) (float *) (char *) 7

UTILIZANDO PONTEIROS void main() { int x = 10; int *pi; } pi = &x; /* *pi == 10 */ (*pi)++; /* *pi == 11 */ printf( %d, x); ==> 11 ao alterar *pi estamos alterando o conteúdo de x 8

UTILIZANDO PONTEIROS void main() { int x = 10; int *pi, *pj; } pi = &x; /* *pi == 10 */ pj = pi; /* *pj == 10 */ (*pi)++; /* (*pi, *pj, x) == 11 */ (*pj)++; /* (*pi, *pj, x) == 12 */ printf( %d, x); /* ==> 12 */ 9

PRÁTICA 1 Pratique a declaração e utilização de ponteiros defina e inicialize uma variável inteira defina um ponteiro para inteiro modifique o valor da variável através do ponteiro verifique os novos valores da variável usando printf 10

ARRAYS arrays são agrupamentos de dados adjacentes na memória declaração: tipo_dado nome_array[<tamanho>]; define um arranjo de <tamanho> elementos adjacentes na memória do tipo tipo_dado 11

ARRAYS Ex: float m[10], *pf; pf = m; 4 BYTES m: m[0] m[1] m[9] pf: 12

REFERENCIANDO ARRAYS em float m[10] m é uma constante que endereça o primeiro elemento do array portanto, não é possível mudar o valor de m Ex: float m[10], n[10]; float *pf; m = n; /* erro: m é constante! */ pf = m; /* ok */ 13

REFERENCIANDO ELEMENTOS pode-se referenciar os elementos do array através do seu nome e colchetes: m[5] = 5.5; if (m[5] == 5.5) else printf( Exito ); printf( Falha ); 14

REFERENCIANDO ELEMENTOS Pode-se referenciar os elementos de um array através de ponteiros: float m[] = { 1.0, 3.0, 5.75, 2.345 }; float *pf; pf = &m[2]; printf( %f, *pf); /* ==> 5.75 */ 15

REFERENCIANDO ELEMENTOS Pode-se utilizar ponteiros e colchetes: float m[] = { 1.0, 3.0, 5.75, 2.345 }; float *pf; pf = &m[2]; printf( %f, pf[0]); /* ==> 5.75 */ Note que o valor entre colchetes é o deslocamento a ser considerado a partir do endereço de referência pf[n] => indica enésimo elemento a partir de pf 16

ARITMÉTICA DE PONTEIROS É possível fazer operações aritméticas e relacionais entre ponteiros e inteiros Soma: ao somar-se um inteiro n a um ponteiro, endereçamos n elementos a mais (n positivo) ou a menos (n negativo) pf[2] equivale a *(pf+2) *(pf + n) endereça n elementos a frente *(pf - n) endereça n elementos atrás pf++ endereça próximo elemento array pf-- endereça elemento anterior array 17

EXEMPLO void main () { int arint[] = { 1,2,3,4,5,6,7 }; int size = 7; /* tamanho do array */ int i, *pi; for (pi=arint, i=0; i < size; i++, pi++) printf( %d, *pi); } ==> 1 2 3 4 5 6 7 18

EXEMPLO - VARIAÇÃO void main () { int arint[] = { 1,2,3,4,5,6,7 }; int size = 7; /* tamanho do array */ int i, *pi; for (pi=arint, i=0; i < size; i++) printf( %d, *pi++); } ==> 1 2 3 4 5 6 7 19

EXEMPLO - VARIAÇÃO void main () { int arint[] = { 1,2,3,4,5,6,7 }; int size = 7; /* tamanho do array */ int i, *pi; pi = arint; printf( %d, *pi); pi += 2; printf( %d, *pi); pi += 2; printf( %d, *pi); pi += 2; printf( %d, *pi); } ==> 1 3 5 7 20

OPERAÇÕES VÁLIDAS SOBRE PONTEIROS É valido: somar ou subtrair um inteiro a um ponteiro (pi ± int) incrementar ou decrementar ponteiros (pi++, pi--) subtrair ponteiros (produz um inteiro) (pf - pi) comparar ponteiros ( >, >=, <, <=, == ) Não é válido: somar ponteiros (pi + pf) multiplicar ou dividir ponteiros (pi*pf, pi/pf) operar ponteiros com double ou float (pi ± 2.0) 21

PRÁTICA 2 Escreva um programa que imprima um array de inteiros na ordem inversa endereçando os elementos com um ponteiro 22

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Introdução a Ponteiros e Vetores em C Material preparado pela profa Silvana Maria Affonso de Lara e utilizado por outros professores (Rosana Vaccari) 2º semestre de 2010