O que é Pointer em C? 
 O Pointer em C, é uma variável que armazena o endereço de outra variável. Um ponteiro também pode ser usado para se referir a outra função de ponteiro. Um ponteiro pode ser incrementado / decrementado, ou seja, para apontar para o próximo / anterior local de memória. O objetivo do ponteiro é economizar espaço na memória e obter um tempo de execução mais rápido. 
 Como usar ponteiros em C 
 Se declararmos uma variável v do tipo int, v na verdade armazenará um valor. 
  
 v é igual a zero agora. 
 Porém, cada variável, além do valor, também tem seu endereço (ou, simplesmente, onde está localizada na memória). O endereço pode ser recuperado colocando um e comercial (&) antes do nome da variável. 
  
 Se você imprimir o endereço de uma variável na tela, ela ficará como um número totalmente aleatório (além disso, pode ser diferente de uma corrida para outra). 
 
 Vamos tentar isso na prática com o ponteiro em C exemplo 
  
 O resultado deste programa é -480613588. 
 Agora, o que é um ponteiro? Em vez de armazenar um valor, um ponteiro y armazenará o endereço de uma variável. 
 Variável de ponteiro 
 Int * y = & v; 
|  VARIÁVEL  |  POINTER  | 
|  Um valor armazenado em um endereço de armazenamento / memória nomeado  |  Uma variável que aponta para o endereço de armazenamento / memória de outra variável  | 
 
 Declarando um ponteiro 
 Como variáveis, ponteiros no programa C mming deve ser declarado antes de poder ser usado em seu programa. Os ponteiros podem ter o nome que você quiser, desde que obedeçam às regras de nomenclatura do C. Uma declaração de ponteiro tem o seguinte formato. 
data_type * pointer_variable_name;
 Aqui, 
-  data_type é o tipo de base do ponteiro dos tipos de variáveis C e indica o tipo da variável para a qual o ponteiro aponta. 
-  O asterisco (*: o mesmo asterisco usado para multiplicação) que é um operador de indireção, declara um ponteiro. 
 Vamos ver algumas declarações de ponteiros válidas neste tutorial de ponteiros C: 
 Inicializar um ponteiro 
 Depois de declarar um ponteiro, nós o inicializamos como variáveis padrão com um endereço de variável. Se os ponteiros na programação C não forem inicializados e usados no programa, os resultados serão imprevisíveis e potencialmente desastrosos. 
 Para obter o endereço de uma variável, usamos o operador e comercial (&), colocado antes do nome de uma variável cujo endereço precisamos. A inicialização do ponteiro é feita com a seguinte sintaxe. 
 Sintaxe do ponteiro 
 pointer = &variable; 
 Um programa simples para ilustração do ponteiro é fornecido abaixo: 
 Resultado: 
Address stored in a variable p is:60ff08Value stored in a variable p is:10
| Operador | Significado | 
| * | Serve 2 propósitos 
 Declaração de um ponteiro  Retorna o valor da variável referenciada  | 
| & | Atende apenas a um propósito 
 Retorna o endereço de uma variável  | 
 Tipos de ponteiros em C 
 A seguir estão os diferentes tipos de ponteiros em C: 
 Ponteiro nulo 
 Podemos criar um ponteiro nulo atribuindo um valor nulo durante a declaração do ponteiro. Este método é útil quando você não possui nenhum endereço atribuído ao ponteiro. Um ponteiro nulo sempre contém o valor 0. 
 O programa a seguir ilustra o uso de um ponteiro nulo: 
#include <stdio.h>int main(){int *p = NULL; //null pointerprintf("The value inside variable p is:\n%x”,p);return 0;}
 Resultado: 
The value inside variable p is:0
 Ponteiro de void 
 Na programação C, um ponteiro de void também é chamado de ponteiro genérico. Ele não possui nenhum tipo de dados padrão. Um ponteiro void é criado usando a palavra-chave void. Ele pode ser usado para armazenar um endereço de qualquer variável. 
 O programa a seguir ilustra o uso de um ponteiro vazio: 
#include <stdio.h>int main(){void *p = NULL; //void pointerprintf("The size of pointer is:%d\n",sizeof(p));return 0;}
 Resultado: 
The size of pointer is:4
 Ponteiro curinga 
 Diz-se que um ponteiro é um ponteiro selvagem se não estiver sendo inicializado para nada. Esses tipos de ponteiros C não são eficientes porque podem apontar para alguma localização de memória desconhecida que pode causar problemas em nosso programa e pode levar ao travamento do programa. Deve-se sempre ter cuidado ao trabalhar com ponteiros selvagens.
 O programa a seguir ilustra o uso de um ponteiro curinga: 
#include <stdio.h>int main(){int *p; //wild pointerprintf("\n%d",*p);return
  read more