English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base del linguaggio C

Controllo del flusso del linguaggio C

Funzioni del linguaggio C

Array del linguaggio C

Puntatori del linguaggio C

Stringhe del linguaggio C

Struttura del linguaggio C

File del linguaggio C

Altro C

Manuale di riferimento del linguaggio C

Puntatori e array del linguaggio C

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:

La relazione tra array e puntatori

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).

Esempio 1: Puntatori e array

#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.

Esempio 2: Array e puntatori

#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.