Relazione tra array e puntatori nella programmazione C (con esempi)

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 a x+1ed x(1)è equivalente a *(x+1).
  • &x(2)è equivalente a x+2ed x(2)è equivalente a *(x+2).
  • Fondamentalmente, &x(i)è equivalente a x+ied x(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, è 3stato 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.

Articoli interessanti...