Ponteiros • Variáveis do tipo “ponteiro” armazenam endereços de memória • Apontam para outra variáveis • Permitem manipulações mais eficientes em estruturas de dados, principalmente estruturas dinâmicas • Notação: – Referência direta: com a variável – Referência indireta: com ponteiro Ponteiros • Exemplo: int contador; //declara variável do tipo inteiro int *pcontador; //declara variável ponteiro para inteiro contador = 12; //atribui o valor 12 para contador pcontador = &contador; //atribui o endereço da variável //contador à variável pcontador 0x0012ff7c contador 12 pcontador 0x0012ff7c Ponteiros • Sintaxe básica – Declaração <tipo da variável> * <nome do ponteiro>; – Atribuição <nome do ponteiro> = &<nome da variável>; – Avaliação *<nome do ponteiro> //retorna (ou altera) o valor //armazenado // no endereço indicado Exemplo: cout << *pcontador; aux = *pcontador + 5; *pcontador = contador + 5; Ponteiros • Exemplo 2: cout << "Endereço: contador: "<< &contador<<endl; cout << "Valor: pcontador: "<< pcontador<<endl; cout << "Valor: contador: "<< contador<<endl; cout << "Valor: *pcontador: "<< *pcontador<<endl; Ponteiros • Sintaxe : expressões e aritmética de ponteiros – Vetores: uso do nome equivale ao ponteiro para primeiro elemento char v[30]; char *pv; pv = v; pv = &v[0]; // instruções equivalentes // – Aritmética: incremento / decremento apontam para próximos elementos pv = &v[0]; pv ++; pv = pv + 3; //aponta elemento inicial // aponta para o segundo; //aponta para o quinto elemento Exercícios Considerando um vetor de elementos quaisquer, utilize ponteiros para realizar uma busca neste vetor, até encontrar e manipular o elemento procurado. T e s t a char v[30]; char *pv; pv = v; // ou pv = &v[0]; while ( ((*pv) != ‘a’) && ((*pv) != 0) ) pv ++; if (*pv ==0) cout<<“Não achei...”; else cout << “achei o valor: “<<*pv; n d o 0