Domanda

Lo so che i puntatori memorizzare l'indirizzo del valore che essi indicano, ma se si visualizza il valore di un puntatore direttamente sullo schermo, si ottiene un numero esadecimale. Se il numero è esattamente ciò che i negozi puntatore, poi quando dicendo

pA = pB; //both are pointers

si sta copiando l'indirizzo. Allora non ci sarebbe una testa più grande per l'utilizzo di puntatori quando si lavora con molto piccoli oggetti come ints e bools?

È stato utile?

Soluzione

Un puntatore è essenzialmente solo un numero. Memorizza l'indirizzo nella RAM in cui i dati sono. Il puntatore in sé è piuttosto piccolo (probabilmente le stesse dimensioni di un int su architetture a 32 bit, long a 64 bit).

Lei ha ragione, tuttavia, che un int * non salvare qualsiasi spazio quando si lavora con ints. Ma non è questo il punto (no pun intended). I puntatori sono lì così si può avere riferimenti per le cose, non solo utilizzare le le cose se stessi.

Altri suggerimenti

Gli indirizzi di memoria.

Ecco le posizioni in memoria in cui altre cose è .

I puntatori sono generalmente la dimensione della parola del processore, quindi possono generalmente essere spostati in un singolo ciclo di istruzioni. In breve, essi sono veloci.

Come altri hanno già detto, un puntatore memorizza un indirizzo di memoria che è "solo un numero' ma che è un'astrazione. A seconda dell'architettura del processore può essere più di un numero, per esempio una base e di offset che deve essere aggiunto al dereference il puntatore. In questo caso la testa è leggermente superiore se l'indirizzo è un singolo numero.

Sì, c'è sovraccarico nell'accesso un int o un bool tramite un puntatore vs direttamente, in cui il processore può mettere la variabile in un registro. Puntatori sono generalmente impiegati quando il valore del riferimento indiretto supera ogni testa, ossia attraversando un array.

Sono stato riferisco al tempo di overhead. Non sono sicuro se OP era più preoccupato spazio o di tempo in testa.

Il numero si riferisce al suo indirizzo nella memoria. La dimensione di un puntatore è tipicamente la dimensione nativa dell'architettura del computer in modo non c'è overhead aggiuntivo rispetto a qualsiasi altro tipo primitivo.

In alcune architetture c'è un overhead aggiuntivo di puntatori a caratteri perché l'architettura supporta solo indirizzamento parole (valori a 32 o 64 bit). Un puntatore a un carattere viene quindi memorizzato come un indirizzo di parola e un offset del carattere all'interno quella parola. De-riferimento al puntatore comporta il recupero della parola e poi lo spostamento e mascherando il suo valore per estrarre il carattere.

Un indirizzo in memoria. Punti da qualche parte! : -)

Vorrei iniziare dalle basi. Prima di tutto, si dovrà sapere quali variabili sono e come vengono utilizzati.

Variabili sono fondamentalmente locazioni di memoria (di solito contenente alcuni valori) e si usa un identificativo (ad esempio, i nomi delle variabili) per riferirsi a quella posizione di memoria e utilizzare il valore attuale in quella posizione.

Per capire meglio, supponiamo di voler le informazioni da celle di memoria presenti in qualche posizione rispetto alla variabile corrente. Possiamo usare l'identificatore per estrarre informazioni da cellule vicine? No. Perché l'identificatore (nome della variabile) solo dare il valore contenuto in quella particolare cella.

Ma, Se in qualche modo siamo in grado di ottenere l'indirizzo di memoria in cui questa variabile è presente, allora si può facilmente passare per le zone limitrofe e utilizzare le loro informazioni così (in fase di esecuzione).

E 'qui che entrano in gioco i puntatori. Essi sono utilizzati per memorizzare la posizione di tale variabile in modo da poter utilizzare le informazioni aggiuntive sull'indirizzo in qualsiasi momento.

Sintassi:. Per memorizzare l'indirizzo di una variabile possiamo semplicemente usare & operator (indirizzo-di)

foo = &bar 

Qui pippo memorizza l'indirizzo della barra di variabile.

Ora, che cosa se vogliamo conoscere il valore attuale a quell'indirizzo?

Per questo, possiamo semplicemente usare l'operatore * (dereferenziazione) .

value = *foo

Ora che abbiamo per memorizzare l'indirizzo di una variabile, avremo bisogno della memoria allo stesso modo di cui abbiamo bisogno in caso di una variabile. Ciò significa che i puntatori sono memorizzati anche nella memoria allo stesso modo di altre variabili, così come nel caso di variabili, possiamo anche memorizzare l'indirizzo di un puntatore in un altro puntatore.

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