Ciao e bentornato.
In questa conferenza, voglio parlare della relazione tra puntatori e array.
Esiste una relazione forte e dobbiamo capire questa relazione prima di poter effettivamente
parlare di aritmetica dei puntatori. Quindi iniziamo.
Un array è una raccolta di oggetti dello stesso tipo
a cui puoi fare riferimento utilizzando un unico nome. Sappiamo che ormai siamo abbastanza bravi con gli array.
Abbiamo utilizzato l'array di caratteri per alcune sezioni.
È un array a cui puoi accedere utilizzando un indice o
un pedice all'interno di quelle parentesi. Lo ricordiamo.
Sappiamo che gli array sono a base zero e iniziano da zero.
Ma ancora una volta, è solo un modo per tenere più mesi con lo stesso nome di variabile.
Un puntatore è una variabile che ha il suo valore, un indirizzo di memoria come
valore e può
fare riferimento a un'altra variabile o costante di un determinato tipo.
A questo punto dovremmo anche essere abbastanza chiari su cosa sia un puntatore.
Contiene solo un indirizzo di memoria.
È possibile utilizzare un puntatore per mantenere l'indirizzo di variabili diverse in momenti diversi.
Ma devi avere lo stesso tipo. Un puntatore int deve
puntare a ripristinare l'indirizzo di un tipo int.
Gli array e i puntatori sembrano abbastanza
diversi, ma sono strettamente correlati e talvolta possono essere usati in modo intercambiabile,
specialmente con l'array di caratteri.
Puoi effettivamente creare un carattere un ricordo che è una
stringa e puoi creare un puntatore a carattere che sono essenzialmente la stessa cosa.
Ci sono solo lievi differenze indipendentemente dal fatto
che si allochi o meno la memoria e la si liberi con un puntatore a caratteri.
Con un array di caratteri, non devi
farlo, ma anche un carattere a ha una dimensione fissa.
Quindi, se crei una stringa di matrice
di caratteri con 20 come dimensione, puoi memorizzare solo 19 caratteri.
Con il puntatore a caratteri, puoi utilizzare la gestione dinamica
della memoria e puoi aumentare o diminuire la dimensione, può essere più
efficiente per quanto riguarda la memoria.
Ma uno degli usi più comuni dei puntatori in c è come puntatori agli array.
Questo è il momento in cui
usi più spesso i puntatori, specialmente ai caratteri.
Il puntatore a caratteri è lo stesso di un array di caratteri.
I motivi principali per utilizzare i puntatori
per cancellare sono quelli di convenienza notazionale e di efficienza del programma.
Quindi puoi usare un array o un puntatore in molti casi tranne
quando parli di gestione dinamica della memoria.
Ma nella maggior parte dei casi puoi. E davvero l'unica differenza è la sintassi,
è la notazione.
È se usi o meno un pedice per accedere a un elemento
o se usi o meno l'aritmetica
dei punti se usi o meno il puntatore a caratteri per puntare all'indirizzo specifico di quell'elemento.
È anche più efficiente usare anche i puntatori di caratteri.
I puntatori agli array generalmente danno come risultato un codice che utilizza meno memoria e viene eseguito più velocemente.
Quindi si desidera utilizzare un puntatore per i caratteri il più possibile
e anche un puntatore ad altri tipi di dati.
Perché è più veloce e usa meno memoria. Puntatori sugli array per la maggior parte.
Se hai un array di 100 numeri interi,
sappiamo cosa significa, dici solo che il valore int è 100. 100 è la dimensione.
Ciò significa che puoi memorizzare 100 numeri interi in quell'array.
Puoi anche definire un puntatore. Lo chiameremo puntatore a valori poiché
punta all'array di valori
e può essere utilizzato per accedere agli interi contenuti in questo array.
Quindi diciamo solo puntatore ai valori instar. Sappiamo come dichiarare un puntatore a questo punto.
Quando si definisce un puntatore utilizzato per puntare gli elementi
di matrice, non si designa il puntatore come puntatore di tipo a matrice.
Fino a questo punto, tutto ciò di cui abbiamo sentito parlare è il puntatore alla
fine, il puntatore al doppio.
Ma quando usi gli array non dici array puntato.
Quel puntatore effettivo punta a un elemento specifico contenuto nell'array.
Quindi tienilo a mente. In realtà non è l'intero array
quando si cancella un puntatore con l'indirizzo dei valori.
Quindi, per impostare il puntatore di valori in modo che punti al primo elemento dell'array di valori, tutto ciò
che devi fare è dire valori punto o è uguale a valori.
Non devi inserire l'indirizzo lì o altro. Perché la
matrice di valori è un puntatore.
Questo è quello che devi guidare nella tua testa è che
tutti questi array sono puntatori sotto il cofano.
Quindi, se vuoi assegnare il primo elemento
di un array a un puntatore, tutto ciò che devi fare è specificare l'array sul
lato destro dell'operatore uguale e
sul lato sinistro hai solo il puntatore dei valori.
Questo punterà al primo indirizzo nell'array o al primo elemento.
L'operatore dell'indirizzo non viene utilizzato, notare che.
Il compilatore c tratta l'aspetto di un nome di
array senza un pedice come un puntatore all'array.
Quindi specificare valori senza un pedice ha l'effetto
di produrre un puntatore al primo elemento di valori.
E quindi ciò significa che ora puoi puntare ai
valori successivi nell'array semplicemente incrementando il puntatore, per andare all'indirizzo successivo.
Ed è di questo che parleremo nelle prossime lezioni quando parleremo di aritmetica dei punti.
Ed è davvero solo una cosa di annotazione ed è anche una cosa di efficienza.
Quindi un modo equivalente per produrre un puntatore all'inizio dei valori è
applicare anche l'indirizzo dell'operatore al primo elemento di destra.
Quindi puoi farlo in due modi, in entrambi i casi va bene.
Ma potresti farlo anche tu. Si potrebbe dire indirizzo puntatore valori di valore inferiore a zero.
Ciò imposterà il puntatore dei valori al primo elemento dell'array.
Quindi puoi usare questo o puoi semplicemente dire che il punto dei valori è uguale al valore.
Ovviamente, senza la e commerciale e senza il
pedice, è un po 'meno codice o più facile da scrivere.
Questo potrebbe essere un po 'più chiaro
perché non sai necessariamente che i valori sono un array a meno che non guardi la dichiarazione.
Ma di nuovo, in entrambi i casi va bene. Il puntatore di valori è uguale a valori o
il puntatore di valori è uguale all'indirizzo di valore inferiore a zero.
È una questione di preferenza del programmatore. E ancora, è una cosa notazionale.
Quindi, giusto
per ribadire, quando hai due espressioni ar
sub-i e asterisco ar più i, quelle
sono equivalenti nel significato.
Quindi vogliamo solo assicurarci che tu lo capisca.
Entrambi funzionano se ar è il nome di un array.
Puoi usare il puntatore e puoi de-referenziarlo.
Ed entrambi funzionano se è una variabile puntatore.
Usa un'espressione come ar plus plus funziona solo se ar è una variabile puntatore.
Quindi non puoi incrementare un array
dicendo più più e aspettarti che passi all'elemento successivo.
Puoi farlo solo su puntatori o puntatori di array.
Quindi se abbiamo ar che è un puntatore che punta a un array e
vogliamo andare all'elemento successivo, possiamo semplicemente incrementarlo ogni volta.
Ma se dici ar sub-i perché ar sub i è un array
e un array è un puntatore, puoi dereferenziarlo dicendo ar che è ar
è un puntatore che
abbiamo assegnato ar più i, è la stessa cosa.
Quindi nelle prossime lezioni parleremo dell'aritmetica dei punti
e questo è fortemente correlato alla relazione tra array e puntatori.
I puntatori possono essere array. Non è un array di puntatori, è un elemento.
Quindi puoi usare l'indirizzo di un puntatore per
navigare attraverso un array, iterare attraverso
un array. Grazie.