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

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

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

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

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

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

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

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

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

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

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

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

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

Linguagem de Programação C. Ponteiros

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

Programação Estruturada

Mais sobre Ponteiros em C

Ponteiros e Alocação de Memória

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

Programação de Computadores II

Carlos Eduardo Batista. Centro de Informática - UFPB

1 Exercícios com ponteiros

Introdução a Ponteiros e Vetores em C

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

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

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

1 Exercícios com ponteiros

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

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

Referências. Linguagem C. Tipos de variáveis em XC8. Tipos de variáveis. Tipos de variáveis em XC 8 Exemplo. Radicais numéricos em C

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

Introdução a Programação de Jogos

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.

19 - Ponteiros em C Parte 1

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Prof. A. G. Silva. 25 de abril de Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de / 68

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

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

Curso de C. Estruturas de Repetição 1/4/ :31 1

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

Linguagem C Ponteiros

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 À LINGUAGEM C. Prof. Msc. Luis Filipe Alves Pereira 2015

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

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

11a. Aula Ponteiros e Vetores

Linguagem C (continuação)

Programação de Computadores II

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

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;

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

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

LINGUAGEM C: PONTEIROS

Faculdade de Computação

Introdução à Linguagem C

Linguagem C. Ponteiros. Alex Vidigal Bastos.

Introdução a Computação

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

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

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

ESTRUTURA DE DADOS (TCC )

Métodos Computacionais. Vetores e Matrizes Dinâmicas

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

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

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

Apontadores/ponteiros

Programação Estruturada Prof. Rodrigo Hausen Ponteiros e Passagem de Parâmetros

Linguagem C: funções e ponteiros. Prof. Críston Algoritmos e Programação

Revisão. Profa Marina Gomes

Operações em Arquivos. MC102 Felipe Bergo

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

Programação 11543: Engenharia Informática 6619: Tecnologias e Sistemas de Informação. Cap. 8 Endereçamento de Memória Endereçamento de Memória

DAS5102 Fundamentos da Estrutura da Informação

Aula 18: Funções em C

Programação de Computadores II

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

SSC300- Linguagens de Programação e Aplicações Profa Vânia de Oliveira Neves. ICMC/USP São Carlos

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Estruturas de Dados Aula 6: Cadeias de Caracteres

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

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

ENGENHARIA DE PRODUÇÃO PROGRAMAÇÃO Algoritmos Conceitos Iniciais. Prof. Luiz Fernando Laguardia Campos FMS

Arrays, Criação de Funções, Estruturas e Manipulação de Arquivos.

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

C++ Orientado a Objetos

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Instituto Superior Técnico Algoritmos e Estruturas de Dados

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

Aula 15: Vetores e Matrizes em C

Funções em C. Lucas Ferrari de Oliveira Professor Adjunto. Linguagem de Programação Estruturada I. Universidade Federal do Paraná

Estruturas de Dados Homogêneas (Vetores e Matrizes) e Ponteiros em C

TE091 Programação Orientada a Objetos Engenharia Elétrica

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

ECT1203 Linguagem de Programação

Ponteiros. Introdução

Melhores momentos AULA 5

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

1) Operadores de auto incremento ++ e auto decremento --

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

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

Transcrição:

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE Algoritmos ANSI C - Ponteiros Copyright 2014 IFRN

Agenda Memória Ponteiros Aritmética de ponteiros Arrays/strings Parâmetros de função Exercícios 2 /20

Antes.. int main(int argc, char **argv) { 4 bytes int a,b,c; a = 10; b = 20; c = (a+b)/2;... 1606416772 1606416768 1606416764 10 a 1606416760 1606416756 20 15 b c 1606416752 55 54 53 52 1606416748 51 50 49 48 O endereçamento é em bytes 3 /20

Endereço de memória Operador de endereço & Lembra do scanf? scanf ( %d,&a) Mostrando o endereço: &a == 1606416764 a 1606416764 10 %p no na função printf printf("o endereço de a e %p \n",&a); 4 /20

Endereço de memória int main(int argc, char **argv) { int a,b,c; a = 10; b = 20; c = (a+b)/2; printf("o endereço de a e %p (%d)\n",&a,&a); printf("o endereço de b e %p (%d)\n",&b,&b); printf("o endereço de c e %p (%d)\n",&c,&c); return 0; %d mostra o endereço em decimal ( warning na compilação) %p mostra o endereço em hexadecimal 5 /20

Ponteiros São variáveis cujo conteúdo é um endereço de memória Tamanho depende da arquitetura do processador/s.o. Usados para manipulação direta da memória Declaração, em ANSI C: int *px; o * indica que a variável é um poneiro O tipo indica o tipo do conteúdo armazenado no endereços apontato pela variável ponteiro 6 /20

Ponteiros Para acessar o conteúdo de um endereço apontado por uma variável ponteiro Operador * (asterisco) 1606416764 20 a 1606416760 1606416764 p Variável p recebe o endereço da variável a int main(int argc, char **argv) { int a = 20; int *p; p = &a; printf("valor de *p: %d\n",*p); *p = 50; printf("valor de a: %d\n",a); return 0; 7 /20

Aritmética de ponteiros Endereços de memória Podemos adicionar ou subtrair um ponteiro Se p é um ponteiro para inteiro, p=p+1 fará que p aponte para o endereço do próximo inteiro Observe que um inteiro possui 4 bytes Também pode ser usado para acessar o espaço de memória a partir de uma base *(p+10) acessa dez espaços a partir de p Pense em como arrays funcionam!!!! 8 /20

Aritmética de ponteiros O que muda com a seguinte expressão? *p = *(p+1)-*(p+3) 1606416772 1606416768 1606416764 1606416760 1606416756 1606416752 1606416748 10 20 15 40 5 1606416760 a b c d e *p 9 /20

Aritmética de ponteiros O que muda com a seguinte expressão? *p = *(p+1)-*(p+3) 1606416772 10 a 1606416768 20 b 1606416764 15 c 1606416760 5 d O valor de d passa a ser 5 1606416756 5 e 1606416752 1606416748 1606416760 *p 10/20

Ponteiros e Arrays Arrays e strings Arrays (e strings) são ponteiros para o início de uma área contínua de memória O valor entre colchetes é o deslocamento a partir do endereço inicial a[4] é equivalente a *(a+4) 11/20

Ponteiros e Arrays Considere um array int a[5] a variável a é um ponteiro para inteiros 5 espaços de memórias consecutivos são reservados São equivalentes: a e &a 40 30 20 10 a[4] a[3] a[2] a[1] 0 a[0] *(a) e a[0] *(a+2) e a[2] 12/20

Ponteiros e Arrays int main(int argc, char * argv[]){ int i,a[5]; int *p; for (i=0 ; i<5 ; i++){ a[i]=i*2; p = a; for (i=0 ; i<5 ; i++){ printf("%d ",*p); p++; return 0; 8 6 4 2 a[4] a[3] a[2] a[1] 0 a[0] 13/20

Ponteiros e Strings int main(int argc, char **argv){ char nome[20] = "Hello World!"; char *p; p = nome; while (*p!='\0'){ printf("%c",*p); p++; printf("\n"); return 0;??????? \0! d l r o W o l l e H nome Nesse caso, a operacão p++ muda em apenas 1 byte (tamanho de um caractere) 14/20

Ponteiros Arrays são ponteiros para área fixa de memória Constante int x[10], y[10], *p; p = x; é válido y = x; NÃO é válido! y = p; NÃO é válido! x = p; NÃO é válido! Pode mudar o conteúdo do endereço 15/20

Parâmetros de função Um ponteiro pode ser passado como parâmetro de função Permite acessar e modificar o conteúdo da variável original Parâmetros Arrays e Strings são apenas ponteiros para a área original da memória void incrementa(int *p){ *p = *p + 1; Recebe um ponteiro para inteiro Modifica o conteúdo de a Passa o endereço de a int main(int argc, char **argv){ int a = 10; printf("valor de a = %d\n",a); incrementa(&a); printf("valor de a = %d\n",a); return 0; 16/20

Parâmetros de função 1606416772 1606416768 1606416764 1606416752 p void incrementa(int *p){ *p = *p + 1; 1606416760 1606416756 1606416752 1606416748 10 a int main(int argc, char **argv){ int a = 10; printf("valor de a = %d\n",a); incrementa(&a); printf("valor de a = %d\n",a); return 0; 17/20

Parâmetros de função void converteparamaiuscula(char *texto) { char *ptr; ptr = texto; char dif = 'a' - 'A'; while (*ptr!= '\0') { if (*ptr >= 'a' && *ptr <= 'z') { *ptr = *ptr - dif; ptr++; int main(int argc, char **argv){ char nome[20]; /*...*/ converteparamaiuscula(nome); /*...*/ return 0; 18/20

Erros O uso de ponteiros favorece ao aparecimento de erros Um acesso a um conteúdo de uma área de memória não autorizada causa erro Segmentation fault Muito cuidado no uso de ponteiros! 19/20

Dúvidas? 20/20