ponteiros programaÇÃo i. ponteiros programação i 2 ponteiros são variáveis que armazenam...
TRANSCRIPT
PONTEIROS
PROGRAMAÇÃO I
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
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
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
Programação I
5
Operadores usados com ponteiros
Operador unário & (“endereço de”)Operador unário * (“conteúdo de”)
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;}
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
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.
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
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
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
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
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.
Programação I
14
Relação entre vetores e ponteiros
para um vetor a
é equivalentea[i] a[i]
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;}
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.
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; }}
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);}