Diego diz: Bom Usuário, a primeira abordagem é que ponteiros são variáveis que apontam para um endereço de memória o qual esta armazenado um valor.
Usuário diz: Puts cara, não entendi não. Melhora isso...
Diego diz: Usuário, imagine o seguinte. Vamos supor que você é secretário de uma empresa, e você conhece todos os setores desta empresa, assim como conhece todas as pessoas que lá trabalham, então quando alguém de fora, chega até a recepção e pergunta a respeito de alguém que trabalha lá, você informa essa pessoa qual o setor e onde ele se encontra, ou seja você aponta onde essa pessoa se encontra na empresa. Essa é uma analogia muito sutil, no entanto é exatamente essa a ideia de ponteiros, eles são utilizados para apontar o endereço de uma variável na memória.
Usuário diz: Ah entendii! Então um ponteiro sempre me mostrará um endereço de memória, que é o endereço que armazena um valor qualquer na memória?
Diego diz: Exato, o ponteiro é apenas uma variável que mostrará o endereço de memória o qual armazena um valor.
Um detalhe importante de ponteiros, é que são mais comumente utilizados nas linguagens de mais baixo nível (mais perto do binário) como por exemplo C, C++, Pascal e etc... E podem ser utilizados para construção de estrutura de dados como, lista, pilha, filha, listas encadeadas, grafos, árvores, etc...
Os vetores por exemplo, nada mais são que ponteiros com espaços consecutivos da memória, onde armazenam valores.
O uso mais comum de ponteiros, são na passagem de parâmetros por REFERÊNCIA onde na função chamada é necessário que se tenha um ponteiro apontando para o endereço físico da variável na memória para que ela possa ser alterada diretamente. Outra aplicação onde o uso de ponteiros é indispensável, é para alocação dinâmica de memória.
Em linguagens mais alto nível (mais próximo da linguagem humana) o uso de ponteiros é restringido ou não suportados, pois se usado de forma indevida, podem gerar problemas no sistema. Não é recomendado que uma variável seja manipulada diretamente através do seu endereço de memória, no entanto, há algumas aplicações que esse recurso se faz essencial.
Usuário diz: Ah entendi, e você teria como me mostrar um exemplo de PONTEIROS em alguma linguagem de programação?
Diego diz: Siim, repare no exemplo utilizado na postagem http://brincandodedesenvolvedor.blogspot.com.br/2014/12/brincandodevpassagem-de-parametros.html.
C++

No exemplo acima, temos a função, passagemPorReferencia(), repare que essa função espera dois parâmetros "*a,*b" onde a e b são ponteiros, ou seja, eles esperam o valor passado na chamada da função passagemPorReferencia, e assim que os parâmetros são passados, a e b apontam para o endereço de memória das variaveis num1 e num2, onde tais variáveis terão seus valores alterados na função passagemPorReferencia. O operador '&' nada mais é que um operador unário (de referência) que retorna o endereço da variável a que se refere.
Usuário diz: Entendii e como seria a representação desse ponteiro na memória?
Diego diz: Usuário, seria mais ou menos assim:
Imagine que num1 seja igual a 1 e num2 seja igual a 10, e que na memória a variavel num1 ocupa o primeiro bloco, e a variavel num2 ocupa o segundo bloco. Então ficaria assim:
Endereço Valor
0x00000001
|
1
|
0x00000002
|
10
|
0x00000003
|
vazio
|
0x00000004
|
vazio
|
Quando a função passagemPorReferência() é chamada, e passamos como parâmetros por referência a variável num1 e num2, o que acontece é que a os ponteiros *a e *b apontam para o endereço de memória das duas variáveis num1 e num2, logo o ponteiro *a aponta para o endereço 0x00000001 que corresponde na memória ao endereço onde o valor da variável num1 esta armazenada, então qualquer alteração feita nesse endereço, causará alteração direta no valor da variavel num1, o mesmo ocorre com a variavel num2.
Usuário diz: Massa, entendi!
Diego diz: Bom, é isso ai Usuário! Até a próxima!
Nenhum comentário:
Postar um comentário