Linguagem C Ponteiros em Linguagem C Ponteiros em

  • Slides: 19
Download presentation
Linguagem C Ponteiros em Linguagem C

Linguagem C Ponteiros em Linguagem C

Ponteiros em Linguagem C • O Que é uma variável? – É uma área

Ponteiros em Linguagem C • O Que é uma variável? – É uma área da memória do computador onde é armazenado um valor…. • Exemplo 1: int a = 1;

Ponteiros em Linguagem C • O Que é uma variável? – É uma área

Ponteiros em Linguagem C • O Que é uma variável? – É uma área da memória do computador onde é armazenado um valor…. • Exemplo 1: int a = 1; Variável Posição a 1000

Ponteiros em Linguagem C • O Que é uma variável? – É uma área

Ponteiros em Linguagem C • O Que é uma variável? – É uma área da memória do computador onde é armazenado um valor…. • Exemplo 1: int a = 1; Variável Posição a 1 1000 1001 1002 1003 1000

Ponteiros em Linguagem C • O Que É Um Ponteiro? – É uma variável

Ponteiros em Linguagem C • O Que É Um Ponteiro? – É uma variável que armazena o endereço na memória do computador onde está outra variável….

Ponteiros em Linguagem C • O Que É Um Ponteiro? – É uma variável

Ponteiros em Linguagem C • O Que É Um Ponteiro? – É uma variável que armazena o endereço na memória do computador onde está outra variável…. • Operadores relacionados a Ponteiros: *(asterisco): informa que uma variável irá armazenar o endereço de outra variável; ou: informa ao computador que vc deseja o valor que está no endereço armazenado; &(e comercial): retorna o endereço de uma variável;

Ponteiros em Linguagem C • Operadores relacionados a Ponteiros: *(asterisco): informa que uma variável

Ponteiros em Linguagem C • Operadores relacionados a Ponteiros: *(asterisco): informa que uma variável irá armazenar o endereço de outra variável; ou: informa ao computador que vc deseja o valor que está no endereço armazenado; &(e comercial): retorna o endereço de uma variável; • Exemplo 2: int a = 1; int *pt_a; pt_a = &a; printf(“%d”, *pt_a);

Ponteiros em Linguagem C • Repetindo: • operador * – declara-se com * •

Ponteiros em Linguagem C • Repetindo: • operador * – declara-se com * • int *x – acessa-se (alterar, modificar, ler) também com * • *x = 10; // atribui o valor 10 ao local apontado pelo ponteiro ‘x’ • printf(“%d”, *x); // imprime o valor armazenado no local apontado por ‘x’ – observação: strings e vetores funcionam de forma diferente: um vetor ou string é um ponteiro por definição • operador & – acessa (alterar, modificar, ler) o endereço de uma variável (que é um ponteiro)

Ponteiros em Linguagem C • Exemplo: 1 int a = 1; 1000 1001 1002

Ponteiros em Linguagem C • Exemplo: 1 int a = 1; 1000 1001 1002 1003 Variável Posição a 1000

Ponteiros em Linguagem C 1 • Exemplo: int a = 1; 1000 int *pt_a;

Ponteiros em Linguagem C 1 • Exemplo: int a = 1; 1000 int *pt_a; 1001 1002 1003 Variável Posição a 1000 pt_a 1001

Ponteiros em Linguagem C 1 • Exemplo: int a = 1; 1000 int *pt_a;

Ponteiros em Linguagem C 1 • Exemplo: int a = 1; 1000 int *pt_a; pt_a = &a; 1000 1001 1002 1003 Variável Posição a 1000 pt_a 1001

Ponteiros em Linguagem C • Onde usar isto? ? ? • Funções! • Alocação

Ponteiros em Linguagem C • Onde usar isto? ? ? • Funções! • Alocação Dinâmica – Não sei o tamanho que o vetor precisa ter…. ! – Não sei o tamanho que cada string precisa ter… – Não sei o tamanho que a matriz precisa ter…

Ponteiros em Linguagem CExemplo #include <stdio. h> int A[10]; int i, j, n; int

Ponteiros em Linguagem CExemplo #include <stdio. h> int A[10]; int i, j, n; int main() { for(i=0; i<n; i++) scanf(“%d”, &A[i]); for(j=0; j<n; j++) for(i=0; i<n-1; i++) if(A[i]>A[i+1]) troca(A[i], A[i+1]); for(i=0; i<n; i++) printf (“%dn”, A[i]); }

Ponteiros em Linguagem CExemplo void troca(int a, int b) { int temp; temp =

Ponteiros em Linguagem CExemplo void troca(int a, int b) { int temp; temp = a; a = b; b = temp; }

Ponteiros em Linguagem C • Vai funcionar? ? ?

Ponteiros em Linguagem C • Vai funcionar? ? ?

Ponteiros em Linguagem C • Vai funcionar? ? ? • NÃOOOOOOO!!!!

Ponteiros em Linguagem C • Vai funcionar? ? ? • NÃOOOOOOO!!!!

Ponteiros em Linguagem C • Vai funcionar? ? ? • NÃOOOOOOO!!!! • Por quê?

Ponteiros em Linguagem C • Vai funcionar? ? ? • NÃOOOOOOO!!!! • Por quê? ? ? ?

Ponteiros em Linguagem CExemplo Corrigido #include <stdio. h> int A[10]; int i, j, n;

Ponteiros em Linguagem CExemplo Corrigido #include <stdio. h> int A[10]; int i, j, n; int main() { for(i=0; i<n; i++) scanf(“%d”, &A[i]); for(j=0; j<n; j++) for(i=0; i<n-1; i++) if(A[i]>A[i+1]) troca(&A[i], &A[i+1]); for(i=0; i<n; i++) printf (“%dn”, A[i]); }

Ponteiros em Linguagem CExemplo Corrigido void troca(int *a, int *b) { int temp; temp

Ponteiros em Linguagem CExemplo Corrigido void troca(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; }