ponteiros programaÇÃo i. ponteiros programação i 2 ponteiros são variáveis que armazenam...

18
PONTEIROS PROGRAMAÇÃO I

Upload: internet

Post on 18-Apr-2015

107 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

PONTEIROS

PROGRAMAÇÃO I

Page 2: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

2

Ponteiros

Ponteiros são variáveis que armazenam endereços de memória

int main (void){ int a; int *p; p = &a; *p = 2; return 0;}

Variável Endereço

Conteúdo

a 0 ?

p 4 ?

8

12

p : variável ponteiro para int

Page 3: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

3

Ponteiros

int main (void){ int a; int *p; p = &a; *p = 2; return 0;}

Variável Endereço

Conteúdo

a 0 ?

p 4 0

8

12

Page 4: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

4

Ponteiros

int main (void){ int a; int *p; p = &a; *p = 2; return 0;}

Variável Endereço

Conteúdo

a 0 2

p 4 0

8

12

Page 5: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

5

Operadores usados com ponteiros

Operador unário & (“endereço de”)Operador unário * (“conteúdo de”)

Page 6: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

6

Operadores usados com ponteiros

int main (void){ int a; int *p; p = &a; *p = 2; return 0;}

int main (void){ int a; int *p = *a; *p = 2; return 0;}

Page 7: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

7

Cuidados ao usar ponteiros

int main ( void ) { int a, b, *p; a = 2; *p = 3; b = a + (*p); printf(" %d ", b); return 0;}

3 é escrito em uma área de memória desconhecida

Page 8: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

8

Aritmética de Ponteiros

Se p é um ponteiro para uma variável, então a expressão p+1 gera o endereço necessário para acessar uma variável de mesmo tipo, adjacente.

Page 9: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

9

Aritmética de Ponteiros

int main (void){ int v[2]; int *p; p = v; p = p + 1; *p = 5; return 0;}

Variável Endereço

Conteúdo

v[0] 0 ?

v[1] 4 ?

p 8 ?

12

Page 10: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

10

Aritmética de Ponteiros

int main (void){ int v[2]; int *p; p = v; p = p + 1; *p = 5; return 0;}

Variável Endereço

Conteúdo

v[0] 0 ?

v[1] 4 ?

p 8 0

12

Page 11: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

11

Aritmética de Ponteiros

int main (void){ int v[2]; int *p; p = v; p = p + 1; *p = 5; return 0;}

Variável Endereço

Conteúdo

v[0] 0 ?

v[1] 4 ?

p 8 4

12

Page 12: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

12

Aritmética de Ponteiros

int main (void){ int v[2]; int *p; p = v; p = p + 1; *p = 5; return 0;}

Variável Endereço

Conteúdo

v[0] 0 ?

v[1] 4 5

p 8 4

12

Page 13: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

13

Relação entre vetores e ponteiros

Um ponteiro é uma variável capaz de armazenar um endereço de memória qualquer.

O nome de um vetor é um endereço fixo de memória.

Page 14: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

14

Relação entre vetores e ponteiros

para um vetor a

é equivalentea[i] a[i]

Page 15: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

15

Relação entre vetores e ponteiros

#include <stdio.h>int main (void){ int i; float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9}; for (i=0; i<6; i++) { printf("%f", v[i]); } return 0;}

#include <stdio.h>int main (void){ int i; float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9}; for (i=0; i<6; i++) { printf("%f", *(v + i); } return 0;}

Page 16: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

16

Passagem de Vetores e Ponteiros para Funções

Podemos passar vetores e ponteiros como parâmetros para funções.

Isso permite que dentro de uma função, sejam alteradas variáveis de outras funções.

Page 17: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

17

Passagem de Vetores e Ponteiros para Funções

v possui o mesmo endereço de vet

int main (void){ int i; float vet[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9}; float m; m = calculaMedia(vet, 6); zerar(vet, 6); return 0;}

float calculaMedia(float v[], int n){ float m = 0.0f; int i; for(i = 0 ; i < n ; i++) { m += v[i]; } m /= n; return m;}void zerar(float v[], int n) { int i; for(i = 0 ; i < n ; i++) { v[i] = 0; }}

Page 18: PONTEIROS PROGRAMAÇÃO I. Ponteiros Programação I 2 Ponteiros são variáveis que armazenam endereços de memória int main (void) { int a; int *p; p = &a;

Programação I

18

Passagem de Vetores e Ponteiros para Funções

#include <stdio.h>void troca(int* pa, int* pb) { int tmp=*pb; *pb=*pa; *pa=tmp;}int main (void) { int a=10, b=20; troca(&a,&b);}