Linguagem C Ponteiros em Linguagem C 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 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 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 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 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 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 * • 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 1003 Variável Posição a 1000 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; 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 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 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 (“%d\n”,A[i]); } 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????? • NÃOOOOOOO!!!! 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; 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 (“%d\n”,A[i]); } Ponteiros em Linguagem CExemplo Corrigido void troca(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; }