Dark Skyllen 7 #1 Postado 5 Abril, 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. Compartilhar este post Link para o post Compartilhar em outros sites
dragonlorde 0 #2 Postado 7 Abril, 2010 WOW bem complicadinho mesmo... Da 1 exemplo de uso de ponteiros? Compartilhar este post Link para o post Compartilhar em outros sites
Dark Skyllen 7 #3 Postado 7 Abril, 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; } Compartilhar este post Link para o post Compartilhar em outros sites
dragonlorde 0 #4 Postado 7 Abril, 2010 (editado) 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? Editado 7 Abril, 2010 por dragonlorde Compartilhar este post Link para o post Compartilhar em outros sites
Dark Skyllen 7 #5 Postado 8 Abril, 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. Compartilhar este post Link para o post Compartilhar em outros sites
Dean 1 #6 Postado 17 Abril, 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. Compartilhar este post Link para o post Compartilhar em outros sites
dragonlorde 0 #7 Postado 22 Abril, 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 Compartilhar este post Link para o post Compartilhar em outros sites