Ponteiros
Código Mestre :: Programação :: C/C++
Página 1 de 1
Ponteiros
Olá pessoal, venho aqui ensinar de uma forma bem resumida e simples sobre como utilizar ponteiros, em todo lugar, livro, site, fóruns, videos, as explicações sobre ponteiros são extensas e acabam não ensinando o que é de fato e como funciona.
Bom, vamos direto ao assunto então:
-O que são ponteiros?
-Ponteiros são endereços de memória.
-Bom, mas o que isso quer dizer?
-Isto que dizer que eles apontam para um lugar da memória.
-Como assim?
-Fácil, sabemos que a memória é dividida em diversos pedaços, estes pedaços são nomeados de endereços.
-Vamos imaginar que a memória seja um edifício, por tanto ela possui vários endereços. Cada apartamento possui seu próprio endereço. Possuindo cada um uma informação, vamos considerar que cada informação seja uma família.
Edifício = Memória
Apartamento = Endereço
Família = Informação
-Ok, entendemos que um edifício possui vários apartamentos e que estes contém famílias, mas como funciona o ponteiro?
-Bom o ponteiro é a chave, vamos explicar isso melhor, para que uma família possa acessar o conteúdo de outro endereço é necessário que ela utilize uma chave para isso.
-Acho que não estou entendendo, pode me mostrar em código?
-Bom, vamos ao código então, para que seja possível visualizar o processo.
-Agora eu entendi.
Quer dizer que o carácter “*” representa o conteúdo do endereço e o “&” a chave do mesmo. Então quando são linkados à uma variável esta passa a ter propriedades de passar o seu valor ou o seu endereço de memória.
-Exatamente. Quando informamos *variavel estamos querendo pegar o conteúdo de uma &chave de endereço.
Vemos isso na linha em que informa: int *ponteiro = &valor;
Na linha anterior vemos: int endereco = &valor;
Este por sua vez vai armazenar o endereço da memória, ou fazendo referencia ao nosso edifício, ele pegara o numero do apartamento.
Espero que nesta forma de explica o que são ponteiros tenha ficado claro o que são e como utilizar.
Para que não haja dúvidas irei colocar outro exemplo de ponteiros utilizando funções.
Qualquer dúvida é só postar, valeu pessoal.
Bom, vamos direto ao assunto então:
-O que são ponteiros?
-Ponteiros são endereços de memória.
-Bom, mas o que isso quer dizer?
-Isto que dizer que eles apontam para um lugar da memória.
-Como assim?
-Fácil, sabemos que a memória é dividida em diversos pedaços, estes pedaços são nomeados de endereços.
-Vamos imaginar que a memória seja um edifício, por tanto ela possui vários endereços. Cada apartamento possui seu próprio endereço. Possuindo cada um uma informação, vamos considerar que cada informação seja uma família.
Edifício = Memória
Apartamento = Endereço
Família = Informação
-Ok, entendemos que um edifício possui vários apartamentos e que estes contém famílias, mas como funciona o ponteiro?
-Bom o ponteiro é a chave, vamos explicar isso melhor, para que uma família possa acessar o conteúdo de outro endereço é necessário que ela utilize uma chave para isso.
-Acho que não estou entendendo, pode me mostrar em código?
-Bom, vamos ao código então, para que seja possível visualizar o processo.
- Ponteiro:
- Código:
#include <stdio.h>
#include <stdlib.h>
int main()
{
// Uma variável com um valor definido.
int valor = 7;
// Endereço da variavel "valor" é armazenado neste inteiro, sendo passado pela chave "&".
int endereco = &valor; // É importante resaltar que o valor mostrado aqui pode variar uma vez que o PC é reiniciado.
// O caracter "*" captura a informação contida na chave "&".
int *ponteiro = &valor;
printf("valor: %i\n", valor);
printf("endereco: %i\n", endereco);
printf("ponteiro: %i\n", *ponteiro);
printf("\n\nCalculo efetuado: *variavel = *variavel + *variavel;\n\n");
/*
* A variavel "valor" está recebendo a soma de seu proprio valor através da varivel *ponteiro.
*
* Este procedimento se dá através do endereço de memória da váriavel "valor" cujo está sendo
* manipulado por "*ponteiro". É possivel notar que após efetuar o calculo, o valor de "valor" e
* "*ponteiro" são alterados por igual, vendo que trata-se do mesmo valor, porém o valor de "endereco"
* permanece o mesmo, pois este é o endereço de memória onde está contida esta informação.
*/
*ponteiro = *ponteiro + *ponteiro;
// Mostra os valores após alteração.
printf("valor: %i\n", valor);
printf("endereco: %i\n", endereco);
printf("ponteiro: %i\n", *ponteiro);
return 0;
}
-Agora eu entendi.
Quer dizer que o carácter “*” representa o conteúdo do endereço e o “&” a chave do mesmo. Então quando são linkados à uma variável esta passa a ter propriedades de passar o seu valor ou o seu endereço de memória.
-Exatamente. Quando informamos *variavel estamos querendo pegar o conteúdo de uma &chave de endereço.
Vemos isso na linha em que informa: int *ponteiro = &valor;
Na linha anterior vemos: int endereco = &valor;
Este por sua vez vai armazenar o endereço da memória, ou fazendo referencia ao nosso edifício, ele pegara o numero do apartamento.
Espero que nesta forma de explica o que são ponteiros tenha ficado claro o que são e como utilizar.
Para que não haja dúvidas irei colocar outro exemplo de ponteiros utilizando funções.
Qualquer dúvida é só postar, valeu pessoal.
- Ponteiro com função:
- Código:
#include <stdio.h>
#include <stdlib.h>
/*
* A função "muda_valor" recebe dois ponteiros e em seguida efetua uma operação matematica com os mesmo.
*/
void muda_valor(int *ponteiro_x, int *ponteiro_y){
*ponteiro_x = *ponteiro_x + 10;
*ponteiro_y = *ponteiro_y * *ponteiro_x;
}
int main()
{
int valor_x = 0;
int valor_y = 0;
printf("Informe um valor para X:");
scanf("%i", &valor_x); // Recebe valor do usuário.
printf("Informe um valor para Y:");
scanf("%i", &valor_y); // Recebe valor do usuário.
printf("\n\nAntes de chamar a função.\nX vale:%i \nY vale:%i", valor_x, valor_y);
/*
* Passa os endereços dos valores informados para os ponteiros da função, estes por sua vez
* irão efetuar as operações definidas e então devolver o valor para que seja exibido.
*/
muda_valor(&valor_x, &valor_y);
printf("\n\nDepois de chamar a função.\nX vale:%i \nY vale:%i", valor_x, valor_y);
return 0;
}
Código Mestre :: Programação :: C/C++
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|