Pergunta

Eu sou um estudante de programação tentando entender melhor os ponteiros, uma das coisas que aprendi é que você pode definir um ponteiro para NULL. Minha pergunta é, qual é a diferença entre essas duas declarações? Em que cada um deles retornar verdadeiro / falso?

if (some_ptr ==  NULL)

if (*some_ptr == NULL)

Obrigado!

Foi útil?

Solução

A primeira é que uma comparação com o endereço da variável como nulo, o segundo dereferences o ponteiro, ficando o valor mantido para ele e compara com null.

Outras dicas

A primeira declaração refere-se ao endereço real do some_ptr ponteiro está apontando. Em caso de NULL (o valor representado pelo NULL definir), é verdade, caso contrário não.

Esta última afirmação se refere ao conteúdo, no endereço o ponteiro está apontando. Então, se você está tendo some_ptr ponto para um número inteiro, e esse inteiro passa a ser o mesmo que o seu nulo definir, segundo avalia a condição para true.

A primeira é que você está comparando o próprio ponteiro contra NULL, que parece desejável.

A segunda é que você é primeiro dereferencing o ponteiro para obter o valor que é então comparada com NULL, como você está comparando um valor int a 0. baseado em seu nome variável.

O primeiro diz:
É some_ptr NULL?

O segundo diz:
É qualquer que seja some_ptr está apontando para NULL?

Por exemplo: int * x; Aqui se você gosta de seleção se x aponta para NULL, em seguida, usamos a primeira declaração. Com o mesmo int * x, se você usar a segunda instrução, então você está tentando cancelar o ponteiro e verifique se o valor que x aponta. Porque NULL é 0 em C, C ++ ele verifica o valor 0 x que aponta.
EDIT:. Também com a segunda instrução, se x aponta para NULL, em seguida, deferencing um resultado ponteiro nulo em uma queda do núcleo no UNIX

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top