Differenza tra queste due affermazioni? - C ++
-
19-09-2019 - |
Domanda
Sono uno studente di programmazione per cercare di capire meglio i puntatori, una delle cose che ho imparato è che si può impostare un puntatore a NULL. La mia domanda è, qual è la differenza tra queste due affermazioni? Quando ognuno di loro sarebbe return true / false?
if (some_ptr == NULL)
if (*some_ptr == NULL)
Grazie!
Soluzione
Il primo fa un confronto con l'indirizzo della variabile su null, il secondo dereferenzia il puntatore, ottenendo il valore contenuto in esso e lo confronta nullo.
Altri suggerimenti
La prima affermazione si riferisce al indirizzo effettivo il puntatore some_ptr sta puntando. Nel caso in cui si tratta di NULL (il valore rappresentato dal definire NULL), è vero, altrimenti no.
La seconda dichiarazione si riferisce al contenuto all? Indirizzo del puntatore sta puntando. Quindi, se hai some_ptr punto in un intero, e che intero sembra essere lo stesso del vostro nullo definire, la seconda condizione restituisce true.
Il primo è che si sta confrontando il puntatore stesso contro NULL, che sembra desiderabile.
La seconda è che si sono prima dereferenziazione il puntatore per ottenere il valore che viene poi confrontato con NULL, come si sta confrontando un valore int a 0. in base al nome della variabile.
La prima dice:
È some_ptr NULL?
Il secondo dice:
È qualsiasi some_ptr sta puntando a NULL?
Per esempio: int * x; Qui se volete controllare se i punti x NULL allora usiamo la prima istruzione. Con le stesse x int *, se si utilizza la seconda affermazione, allora si sta cercando di dereference il puntatore e controllare per il valore che x punti. Perché NULL è 0 in C, C ++ controlla per il valore 0 che x punti.
EDIT:. Anche con la seconda affermazione, se x punta a NULL, quindi deferencing un NULL pointer risultati in una goccia di base su UNIX