Diferença entre essas duas declarações? - C ++
-
19-09-2019 - |
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!
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