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!

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top