Dark Skyllen 7 #1 Posted April 5, 2010 Aula 7 - Ponteiros Com certeza a aula que trará muitas dúvidas e problemas. Primeiramente gostaria de dizer que pra entender ponteiros, terá de ler a aula com muita atenção e se esforçar, porquê são realmente complicadinhos de entender. O que são ponteiros? Antes de mais nada, precisamos entender como funcionam as variáveis: Quando são declaradas elas ocupam um espaço de memória, onde cada um, terá uma identificação. E essas variáveis permanecerão nesse endereço de memória até que sejam liberadas. Exemplo: Ao declararmos a variavel X, ela ocupará a posição: 00ffx7891 da memória (só um exemplo) e quando alteramos o valor da variável a posição de X passa a ter o valor que será alocado na posição da memória.. Para entenderem melhor colem isso no DevC++: #include <iostream.h>int main(){ int minhaVar = 10; cout << &minhaVar; system("pause>null");} Ao executarem o programa verão que o escrito na tela não é 10, é o endereço de memória da variável minhaVar. Então para mostrarmos o endereço onde uma variável está alocada, usamos o caractere &. Utilizando ponteiros Mas o que ponteiros tem a ver com isso? Tudo! São esses ponteiros que são responsáveis por guardarem o endereço de uma variável. Ponteiros são variáveis também que são declaradas com um * antes do seu nome e essas devem ser inicializadas com 0 ou com algum valor, para não ocorrer futuros erros. #include <iostream.h>int main(){ int minhaVar = 10; int* pMinhaVar = &minhaVar; //Declara o ponteiro e já recebe o endereço de memória da minhaVar. cout << pMinhaVar; system("pause>null");} Exemplo simples de declaração de ponteiros. Ao declarmos ele, fizemos ele apontar para o endereço de memória. Ou seja, as duas variáveis agora podem alterar os valores que estão naquele endereço de memória. Mas existem 3 retornos diferentes para uma variável ponteiro. Ela pode retornar o endereço de memória em que está apontando, pode retornar o valor que está nesse endereço de memória e pode retorna o endereço de memória em que a variável ponteiro está.. Vejam: #include <iostream.h>int main(){ // Endereço de minhaVar = 00xff078 (ilustrativo) // Endereço de *pMinhaVar = 00xff079 (ilustrativo) int minhaVar = 10; int* pMinhaVar = &minhaVar; cout << pMinhaVar << endl; // Vai retornar 00xff078 -- onde está alocado minhaVar cout << *pMinhaVar << endl; // Vai retornar 10 -- valor que esta em 00xff078 cout << &pMinhaVar << endl; // Vai retornar 00xff079 -- onde a variavel *pMinhaVar está alocada system("pause>null");} Por apontar para um endereço ja ocupado, quando receberem valores alocaram esses valores nos endereços de memória em que apontam. Vejam o exemplo: #include <iostream.h> int main() { // Endereço de minhaVar = 00xff074 (ilustrativo) // Endereço de *pMinhaVar = 00xff077 (ilustrativo) int minhaVar = 10; int* pMinhaVar = &minhaVar; *pMinhaVar = 30; cout << *pMinhaVar << endl; cout << minhaVar; system("pause>null"); } minhaVar passará a ser 30 pois o valor do endereço de memória que ela está foi alterado pela variável *pMinhaVar que aponta para este endereço. Deêm uma olhada na imagem, pra ver se as coisas esclarem um pouco: Sim, é bastante complicado este conceito.. Não vou sobrecarregar a aula, para ficar mais fácil o entendimento.. Estudem, leiam quantas vezes for necessário para entender! É um conceito MUIIIIITO utilizado em C++. Até a próxima aula pessoal! Abraços. Share this post Link to post Share on other sites
dragonlorde 0 #2 Posted April 7, 2010 WOW bem complicadinho mesmo... Da 1 exemplo de uso de ponteiros? Share this post Link to post Share on other sites
Dark Skyllen 7 #3 Posted April 7, 2010 WOW bem complicadinho mesmo...Da 1 exemplo de uso de ponteiros? Podemos fazer uma função retornar dois dados ou então alterarmos o valor de uma variável através de uma função onde ela não esteja declarada.. Veja o exemplo abaixo: #include <iostream.h> using namespace std; void alterarValores(int* v1, int* v2) { int newValor1, newValor2; cout << "Digite os novos valores" << endl; cin >> newValor1 >> newValor2; // Recebe os novos valores *v1 = newValor1; // Alteramos o que está no endereço de memória da *v2 = newValor2; //variavel valor1 de cima (função int main()) } int main(void) { int valor1, valor2 = 0; cout << "Digite dois valores" << endl; cin >> valor1 >> valor2; // Recebe dois números quaisquer cout << "Variáveis antes de serem alteradas: " << valor1 << " e " << valor2 << endl; alterarValores(&valor1, &valor2); // Passa o endereço de memória desses números// e chama a função pra alterar.. cout << "Variáveis depois de serem alteradas: " << valor1 << " e " << valor2 << endl; system("Pause>null"); return 0; } Share this post Link to post Share on other sites
dragonlorde 0 #4 Posted April 7, 2010 (edited) Hm... Muito legal os ponteiros... Tem alguma aula que explique o void?Porque eu não vi o void explicado em nenhuma :S Obrigado pelas aulas e pelo exemplo... To esperando a parte 2 agora no 09/04 =D EDIT-- Procurando na net achei isso sobre void... A palavra-chave "void" em C + + define o conceito de não-existência ou não de atribuição de um tipo em uma variavel ou em uma declaração.... Esta isto correto? Edited April 7, 2010 by dragonlorde Share this post Link to post Share on other sites
Dark Skyllen 7 #5 Posted April 8, 2010 Hm...Muito legal os ponteiros... Tem alguma aula que explique o void?Porque eu não vi o void explicado em nenhuma :S Obrigado pelas aulas e pelo exemplo... To esperando a parte 2 agora no 09/04 =D EDIT-- Procurando na net achei isso sobre void... A palavra-chave "void" em C + + define o conceito de não-existência ou não de atribuição de um tipo em uma variavel ou em uma declaração.... Esta isto correto? Sim, tem o mesmo conceito que null, ou seja, não há retorno na função.. o retorno é nulo. Share this post Link to post Share on other sites
Dean 1 #6 Posted April 17, 2010 Muito bom as aulas, só entendi a verdadeira utilidade de ponteiros quando precisei deles, antes eu pensava que era muito difícil , mas agora que vi que é fácil. Share this post Link to post Share on other sites
dragonlorde 0 #7 Posted April 22, 2010 Acho que falto um exemplo desse estilo ai: #include <iostream.h> int main() { int minhaVar = 10; int* pMinhaVar = &minhaVar; cout << *pMinhaVar << endl;//IRA MOSTRAR 10 NA TELA O VALOR QUE ESTA ALOCADO NO ENDEREÇO DE MEMORIA DE MINHAVAR *pMinhaVar = 12;//VALOR QUE ESTA ALOCADO NO ENDEREÇO DE MEMORIA DE MINHAVAR MUDADO PARA 12 cout << minhaVar << endl;//IRA MOSTRAR 12 NA TELA O VALOR QUE ESTA ALOCADO NO ENDEREÇO DE MEMORIA DE MINHAVAR, DEPOIS DA ALTERACAO system("pause>null"); } Mudar valores de variaveis via ponteiros Share this post Link to post Share on other sites