O que significa um apontador apontar para NULL?
Exemplo: int *
NULL;
Exemplo: int *
Passo 1
O enunciado pergunta: “O que significa um apontador apontar para NULL?” e dá o exemplo
.
Informações fornecidas: a declaração de um ponteiro para inteiro inicializado com
.
Pergunta explícita: interpretar semanticamente o que quer dizer “apontar para NULL” nesse contexto e o que isso implica ao usar o ponteiro.
Pergunta explícita: interpretar semanticamente o que quer dizer “apontar para NULL” nesse contexto e o que isso implica ao usar o ponteiro.
Passo 2
Vamos começar do básico — o que é um ponteiro.
Um ponteiro é uma variável que guarda um endereço de memória (ou seja, aponta para onde alguma coisa está guardada). Por exemplo:
Um ponteiro é uma variável que guarda um endereço de memória (ou seja, aponta para onde alguma coisa está guardada). Por exemplo:
Aqui:
-
é uma variável do tipo inteiro que contém o valor . -
é o endereço de memória onde está guardado. -
declara que é um ponteiro para inteiro (pode armazenar um endereço de um inteiro). - Ao fazer
, agora “aponta para” a variável .
Para acessar o valor apontado usamos o operador de desreferência: se fizermos , estamos escrevendo na célula de memória onde está — ou seja, passa a valer .
Passo 3
O que é
?
-
é uma constante especial usada em C (e C-like) para indicar “nenhum endereço válido”. É o valor-sentinela que significa que o ponteiro não aponta para nenhum objeto válido. - Historicamente, em C
costuma ser definido como ou simplesmente . Em C++ moderno usamos preferencialmente (tipo próprio para ponteiro nulo).
No seu exemplo:
isso quer dizer: criei um ponteiro para inteiro chamado
e dei a ele o valor “não aponta para nada”.
Passo 4
Consequências práticas de
: quando um ponteiro tem valor NULL:
- Ele não contém um endereço válido de um objeto.
- Não se deve desreferenciá-lo. Ou seja, fazer
quando provoca comportamento indefinido (na prática normalmente causa segmentation fault / crash). Exemplo perigoso:
Portanto, antes de usar o ponteiro para ler ou escrever, sempre verifique se ele não é NULL:
ou, idiomaticamente,
Passo 5
Diferença importante: ponteiro NULL vs ponteiro não inicializado.
-
inicializa com um valor conhecido (NULL). Isso é seguro — sabemos que ele não aponta para nada. -
sem inicialização deixa com “lixo” (um endereço qualquer). Desreferenciar pode causar comportamento indefinido e é mais perigoso do que ter NULL.
Conclusão prática: inicialize seus ponteiros com(ou com um endereço válido) quando não tiver um alvo ainda.
Passo 6
Usos comuns de ponteiros com NULL (quando é útil tê-los assim):
- Indicar “fim” em estruturas encadeadas (por exemplo, último nó de uma lista ligada aponta para NULL).
- Indicar falha de alocação dinâmica: funções como
retornam se não conseguem alocar memória. Exemplo:
- Retornar um ponteiro que signifique “não encontrado” ou “sem resultado” em funções que deveriam devolver um endereço.
Passo 7
Regras práticas e boas práticas (para a prova e para programar):
- Sempre inicialize ponteiros:
se você não tem ainda um endereço válido. - Antes de
, verifique (ou ). - Após dar
em C, é boa prática fazer para evitar “dangling pointer” (ponteiro para memória já liberada). - Não faça aritmética de ponteiros com NULL (por exemplo,
quando é inválido — não há objeto base para deslocamento).
Passo 8
Observações sobre C vs C++:
- Em C,
é a convenção clássica (macro). Comparações e atribuições são comuns. - Em C++11 em diante, prefira
(tipo específico para ponteiros nulos), porque evita ambiguidade com inteiros.
Passo 9
Resumo rápido (mentira — é só pra fixar):
- “Apontar para NULL” = o ponteiro contém o valor nulo; ele não aponta para nenhum objeto/área válida.
- Não desreferencie um ponteiro nulo; verifique antes.
- Inicializar com NULL é seguro; é melhor do que deixar sem inicializar.
- Use NULL para sinalizar ausência de alvo; use nullptr em C++ moderno.
Resposta
Um ponteiro apontar para NULL significa que ele é um “ponteiro nulo” — ou seja, não aponta para nenhum endereço/objeto válido; no exemplo
a variável
foi inicializada para não apontar para nada e não deve ser desreferenciada (faça
antes de usar).