Qual è una bella spiegazione per i puntatori? [chiuso]

71

Nei tuoi studi (da solo o per una classe) hai avuto un momento "ah ah" quando finalmente hai capito davvero dei suggerimenti? Hai una spiegazione che usi per i programmatori principianti che sembra particolarmente efficace?

Ad esempio, quando i principianti incontrano per la prima volta i puntatori in C, potrebbero semplicemente aggiungere & s e * s fino a quando non compila (come facevo io stesso una volta). Forse è stata una foto, o un esempio davvero ben motivato, che ha fatto puntare "click" a te o al tuo studente. Cos'era e cosa hai provato prima che non sembrasse funzionare? Sono stati riscontrati prerequisiti di argomenti (ad esempio, strutture o matrici)?

In altre parole, cosa era necessario per capire il significato di & s e * , quando potevi usarli con sicurezza? L'apprendimento della sintassi e della terminologia o dei casi d'uso non è sufficiente, a un certo punto l'idea deve essere interiorizzata.

Aggiornamento: mi piacciono molto le risposte finora; per favore, continuate a farli venire Ci sono molte grandi prospettive qui, ma penso che molte siano buone spiegazioni / slogan per noi dopo abbiamo interiorizzato il concetto. Sto cercando i contesti e le circostanze dettagliate quando ti è venuto in mente.

Ad esempio:

I only somewhat understood pointers syntactically in C. I heard two of my friends explaining pointers to another friend, who asked why a struct was passed with a pointer. The first friend talked about how it needed to be referenced and modified, but it was just a short comment from the other friend where it hit me: "It's also more efficient." Passing 4 bytes instead of 16 bytes was the final conceptual shift I needed.

    
posta Macneil 30.07.2015 - 15:56
fonte

32 risposte

0

Supponendo che tu abbia già capito gli array almeno a livello superficiale, la mia migliore spiegazione per i puntatori sarebbe questa:

Immagina tutta la memoria del tuo computer (o lo spazio degli indirizzi nel tuo processo se vuoi essere più preciso) come una gigantesca serie di byte. Un puntatore è solo un indice in quella matrice. I puntatori sono quindi solo un tipo speciale di numero intero.

Imparare tutti i trucchi che C e i programmatori di assiemi potrebbero fare trattando i puntatori come numeri interi e su come la distinzione sia puramente convenzionale a livello di linguaggio assembly, ha contribuito a consolidare questa comprensione per me.

    
risposta data 12.03.2011 - 17:46
fonte
-1

Questo documento mi ha davvero aiutato a capire bene: link

Mi sono collegato alla versione UD perché mi piace la spiegazione aggiuntiva P. Conrad ha aggiunto, ma la versione originale di Stanford è altrettanto buona. Tutti questi documenti CS di introduzione di Stanford hanno una casa permanente sul mio iPad. Mi piace leggerli ogni tanto - mi tiene a terra: -)

    
risposta data 07.03.2012 - 01:51
fonte

Leggi altre domande sui tag