Ponteiros

Cada variável na linguagem C é armazenada em um local na memória do seu computador.

Entendendo Ponteiro

Ponteiros serve para pegarmos e mexermos o endereço de memória que foi utilizada no computador, assim temos mais controle do que estamos fazendo com a memória sendo utilizada.

É muito utilizada nos Vetores e Funções, tendo seu uso muito importante na Linguagem C, onde com os ponteiros podemos alterar os valores armazenados em um ponto da memória

Símbolos

  • Usamos o * para duas coisas:

    • Quando usamos o * na direita de um tipo de dado, estamos dizendo que essa variável é um Ponteiro.

    • Quando usamos o * na esquerda do nome do ponteiro significa que estamos chamando o valor que existe naquele endereço de memória.

  • Usamos o & para pegar o endereço de memória de uma variável.

    • No scanf() é usado para pegar o endereço de memória da variável e adicionar o valor que for entrar.

    • No Ponteiro ele pega onde a variável está armazenada.

// Criando uma Variável
int valor = 3;

// Criando um Ponteiro para o Endereço da Variavel valor
int* ponteiro = &valor;

// Pegando o valor e salvando em outra variavel
int outra_variavel = *ponteiro; //valor: 3

// Testando
printf("Valor da Variavel valor: %d ", valor);
printf("Valor da Variavel nova: %d ", outra_variavel);

Lendo o Endereço de Memória

  • Usamos o Modificador %d sempre que queremos imprimir um valor inteiro, mas se queremos apresentar um Endereço de memória usamos outro tipo de Modificador especial.

  • Com o Modificador %p podemos imprimir na tela qual o endereço de memória da variável que foi adicionada em um Ponteiro.

// Criando uma Variável
int valor = 3;

// Criando o Ponteiro
int* ponteiro = &valor;

// Apresentando o Endereço de Memória
printf("Endereço de Memória do valor: %p ", ponteiro);
// Exemplo de Endereço: 0x7ffceaa2fd1c     

// Imprimindo os valores
printf("Valor vindo da variavel: %d", valor); // 3
printf("Valor vindo do ponteiro: %d", *ponteiro); // 3
  • Endereços de Memória é um valor do tipo Hexadecimal, sendo que cada vez que tu verifica o endereço de memória pode ser um valor diferente

Ponteiros Válidos

  • Um ponteiro válido é um ponteiro que aponta para uma área de memória válida(normalmente uma variável).

  • Se um ponteiro não for válido, ele vai entregar um erro chamado Falha de Segmentação(Segmentation Fault) no Linux.

// Variavel
int valor = 3;

// Ponteiro
int* ptr; //Não iniciado

// Saida
printf("Valor: %d", *ptr); // Segmentation Fault

Ponteiros NULL

  • É uma boa prática armazenar o valor NULL em ponteiros não inicializados.

  • Podemos usar isso para podermos verificar se o ponteiro foi inicializado ou não.

  • NULL é simplesmente uma constante definida como ZERO.

// Variável
int a = 10;

// Ponteiro
int* ptr = NULL;

// Teste
if(ptr != NULL){
    printf("Ponteiro Inicializado!!");
}else{
    printf("Ponteiros Inválidos!");
}

Last updated