In questo tutorial, imparerai a conoscere la relazione tra array e puntatori nella programmazione C. Imparerai anche ad accedere agli elementi dell'array usando i puntatori.
Prima di conoscere la relazione tra array e puntatori, assicurati di controllare questi due argomenti:
- C Arrays
- Puntatori C.
Relazione tra array e puntatori
Un array è un blocco di dati sequenziali. Scriviamo un programma per stampare gli indirizzi degli elementi dell'array.
#include int main() ( int x(4); int i; for(i = 0; i < 4; ++i) ( printf("&x(%d) = %p", i, &x(i)); ) printf("Address of array x: %p", x); return 0; )
Produzione
& x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Indirizzo dell'array x: 1450734448
C'è una differenza di 4 byte tra due elementi consecutivi dell'array x. È perché la dimensione di int
è di 4 byte (sul nostro compilatore).
Si noti che l'indirizzo di & x (0) e x è lo stesso. È perché il nome della variabile x punta al primo elemento dell'array.
Dall'esempio sopra, è chiaro che &x(0)
è equivalente a x. Ed x(0)
è equivalente a *x
.
Allo stesso modo,
&x(1)
è equivalente ax+1
edx(1)
è equivalente a*(x+1)
.&x(2)
è equivalente ax+2
edx(2)
è equivalente a*(x+2)
.- …
- Fondamentalmente,
&x(i)
è equivalente ax+i
edx(i)
è equivalente a*(x+i)
.
Esempio 1: puntatori e matrici
#include int main() ( int i, x(6), sum = 0; printf("Enter 6 numbers: "); for(i = 0; i < 6; ++i) ( // Equivalent to scanf("%d", &x(i)); scanf("%d", x+i); // Equivalent to sum += x(i) sum += *(x+i); ) printf("Sum = %d", sum); return 0; )
Quando esegui il programma, l'output sarà:
Immettere 6 numeri: 2 3 4 4 12 4 Somma = 29
Qui abbiamo dichiarato un array x di 6 elementi. Per accedere agli elementi dell'array, abbiamo utilizzato i puntatori.
Nella maggior parte dei contesti, i nomi degli array decadono in puntatori. In parole semplici, i nomi degli array vengono convertiti in puntatori. Questo è il motivo per cui puoi usare i puntatori per accedere agli elementi degli array. Tuttavia, dovresti ricordare che i puntatori e gli array non sono la stessa cosa .
Ci sono alcuni casi in cui i nomi degli array non decadono in puntatori. Per saperne di più, visita: Quando il nome dell'array non decade in un puntatore?
Esempio 2: array e puntatori
#include int main() ( int x(5) = (1, 2, 3, 4, 5); int* ptr; // ptr is assigned the address of the third element ptr = &x(2); printf("*ptr = %d ", *ptr); // 3 printf("*(ptr+1) = %d ", *(ptr+1)); // 4 printf("*(ptr-1) = %d", *(ptr-1)); // 2 return 0; )
Quando esegui il programma, l'output sarà:
* ptr = 3 * (ptr + 1) = 4 * (ptr-1) = 2
In questo esempio, &x(2)
l'indirizzo del terzo elemento è assegnato al puntatore ptr. Quindi, è 3
stato visualizzato quando abbiamo stampato *ptr
.
E la stampa *(ptr+1)
ci fornisce il quarto elemento. Allo stesso modo, la stampa *(ptr-1)
ci fornisce il secondo elemento.