English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo tutorial, imparerai la relazione tra array e puntatori nel linguaggio C. Inoltre, imparerai a accedere agli elementi dell'array utilizzando i puntatori.
Prima di comprendere la relazione tra array e puntatori, assicurati di controllare i seguenti due argomenti:
Un array è un blocco di dati sequenziale. Scriveremo un programma per stampare l'indirizzo degli elementi dell'array.
#include <stdio.h> int main() { int x[4]; int i; for(i = 0; i < 4; ++i) { printf("&x[%d] = %p\n", i, &x[i]); } printf("indirizzo dell'array x: %p", x); return 0; }
Risultato dell'output
&x[0] = 1450734448 &x[1] = 1450734452 &x[2] = 1450734456 &x[3] = 1450734460 Indirizzo dell'array x: 1450734448
La differenza tra due elementi consecutivi dell'array x è di 4 byte. Questo è perché la dimensione di int è di 4 byte (nel nostro compilatore).
Notare che l'indirizzo &x[0] e x sono gli stessi. Questo è perché il nome della variabile x punta al primo elemento dell'array.
Da esempi precedenti è chiaro che &x[0] è equivalente a x e x[0] è equivalente a *x.
Allo stesso modo,
&x[1] è equivalente a x+1 e x[1] è equivalente a *(x+1).
&x[2] è equivalente a x+2 e x[2] è equivalente a *(x+2).
...
Fundamentalmente &x[i] è equivalente a x+i e x[i] è equivalente a *(x+i).
#include <stdio.h> int main() { int i, x[6], sum = 0; printf("Inserisci 6 numeri: "); for(i = 0; i < 6; ++i) { // Equivalente a scanf("%d", &x[i]); scanf("%d", x+i); // Equivalente a sum += x[i] sum += *(x+i); } printf("Somma = %d", sum); return 0; }
Eseguiendo il programma, l'output è:
Inserisci 6 numeri: 2 3 4 4 12 4 Somma = 29
In questo esempio, abbiamo dichiarato un array contenente 6 elementi x. Per accedere agli elementi dell'array, abbiamo utilizzato un puntatore.
Nella maggior parte dei casi, il nome dell'array si riduce a un puntatore. In breve, il nome dell'array viene convertito in un puntatore. Questo è il motivo per cui puoi usare i puntatori per accedere agli elementi dell'array. Ma, dovresti ricordare chePuntatori e array non sono la stessa cosa.
In alcuni casi, il nome dell'array non si riduce a un puntatore.
#include <stdio.h> int main() { int x[5] = {1, 2, 3, 4, 5}; int* ptr; // ptr è stato assegnato l'indirizzo del terzo elemento ptr = &x[2]; printf("*ptr = %d \n", *ptr); // 3 printf("*(ptr+1) = %d \n", *(ptr+1)); // 4 printf("*(ptr-1) = %d", *(ptr-1)); // 2 return 0; }
Eseguiendo il programma, l'output è:
*ptr = 3 *(ptr+1) = 4 *(ptr-1) = 2
In questo esempio, l'indirizzo del terzo elemento &x [2] è assegnato al puntatore ptr. Pertanto, quando stampiamo * ptr, viene visualizzato 3.
E, output *(ptr+1) ottiene il quarto elemento. Allo stesso modo, output *(tr-1) otterrà il secondo elemento.