Pointers and Arrays in C
Video tutorial gratuito di Tim Buchalka's Learn Programming Academy
Professional Programmers and Teachers - 2.28M students
62 corsi
2.359.297 studenti
Segui il corso completo per saperne di più
C Programming For Beginners - Master the C Language
C Programming will increase career options. Become a better dev in other languages by learning C. Pointers explained
25:36:08 di video on-demand • Ultimo aggiornamento: Aprile 2025
Understand the fundamentals of the C Programming Language
Make yourself more marketable for entry level programming positions
Create your first C Application
Learn one of the most popular, widly used languages in the world
Understand variables and the different data types
Apply for real-time programming positions
Understand the core language that most modern languages are based on
Learn how to write high-quality code
Italiano [Auto]
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.