Il problema quando si esegue qualcosa come &&a;
è che si sta richiedendo "l'indirizzo dell'indirizzo a
".
Questo non ha senso. Possiamo ottenere l'indirizzo di a
bene, ma questo non ci dà una variabile, possiamo prendere l'indirizzo di. Ci dà solo un valore puntatore. Fino a quando quel valore non viene memorizzato da qualche parte, non possiamo prendere il suo indirizzo.
Se si dispone di codice come 2+2
, il risultato non ha nemmeno un indirizzo. È solo il valore 4, ma non è ancora stato memorizzato da nessuna parte, quindi non possiamo prendere un indirizzo. Una volta che lo memorizziamo in una variabile int
, possiamo prendere l'indirizzo di quella variabile.
Fondamentalmente, il problema è la differenza tra valori e variabili. Un valore è solo un numero (o un carattere o altri dati). Una variabile è un luogo in memoria in cui è memorizzato un valore. Una variabile ha un indirizzo, ma un valore no.
In C++ - speak, è la differenza tra rvalues e lvalue. Un valore di rvalue è essenzialmente temporaneo, tipicamente è un valore che è stato restituito da un'altra operazione (come l'operatore &
nel tuo caso), ma che non è stato ancora memorizzato da nessuna parte.
Una volta memorizzato in una variabile, si ottiene un lvalue e i lvalue hanno un indirizzo che è possibile prendere.
Quindi sì, sono necessarie le due dichiarazioni separate. Prima prendi l'indirizzo e poi lo memorizzi da qualche parte. E poi puoi prendere l'indirizzo di questo "da qualche parte".
Perché pensi che sia necessario un puntatore a un puntatore, in questo caso? – SingleNegationElimination
possibile duplicato di [Come funzionano i puntatori ai puntatori in C?] (Http://stackoverflow.com/questions/897366/how-do-pointer-to-pointers-work-in-c) –
@Jens Gustedt, questo non è un duplicato La domanda collegata chiede informazioni sugli indicatori in generale. Questa domanda riguarda il caso specifico. –