Beziehung zwischen Arrays und Zeigern in der C-Programmierung (mit Beispielen)

In diesem Tutorial lernen Sie die Beziehung zwischen Arrays und Zeigern in der C-Programmierung kennen. Sie werden auch lernen, mit Zeigern auf Array-Elemente zuzugreifen.

Bevor Sie sich mit der Beziehung zwischen Arrays und Zeigern vertraut machen, sollten Sie diese beiden Themen überprüfen:

  • C Arrays
  • C Zeiger

Beziehung zwischen Arrays und Zeigern

Ein Array ist ein Block sequentieller Daten. Schreiben wir ein Programm zum Drucken von Adressen von Array-Elementen.

 #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; ) 

Ausgabe

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Adresse des Arrays x: 1450734448 

Es gibt einen Unterschied von 4 Bytes zwischen zwei aufeinanderfolgenden Elementen des Arrays x. Dies liegt daran, dass die Größe von int4 Byte beträgt (auf unserem Compiler).

Beachten Sie, dass die Adresse von & x (0) und x gleich ist. Dies liegt daran, dass der Variablenname x auf das erste Element des Arrays zeigt.

Aus dem obigen Beispiel ist klar, dass dies &x(0)äquivalent zu x ist. Und x(0)ist gleichbedeutend mit *x.

Ähnlich,

  • &x(1)ist äquivalent zu x+1und x(1)ist äquivalent zu *(x+1).
  • &x(2)ist äquivalent zu x+2und x(2)ist äquivalent zu *(x+2).
  • Grundsätzlich &x(i)ist äquivalent zu x+iund x(i)ist äquivalent zu *(x+i).

Beispiel 1: Zeiger und Arrays

 #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; ) 

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Geben Sie 6 Zahlen ein: 2 3 4 4 12 4 Summe = 29 

Hier haben wir ein Array x von 6 Elementen deklariert. Für den Zugriff auf Elemente des Arrays haben wir Zeiger verwendet.

In den meisten Kontexten zerfallen Array-Namen in Zeiger. In einfachen Worten werden Array-Namen in Zeiger konvertiert. Aus diesem Grund können Sie Zeiger verwenden, um auf Elemente von Arrays zuzugreifen. Beachten Sie jedoch, dass Zeiger und Arrays nicht identisch sind .

Es gibt einige Fälle, in denen Array-Namen nicht in Zeiger zerfallen. Weitere Informationen finden Sie unter: Wann zerfällt der Array-Name nicht in einen Zeiger?

Beispiel 2: Arrays und Zeiger

 #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; )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 * ptr = 3 * (ptr + 1) = 4 * (ptr-1) = 2

In diesem Beispiel wird &x(2)die Adresse des dritten Elements dem ptr-Zeiger zugewiesen. Daher 3wurde beim Drucken angezeigt *ptr.

Und das Drucken *(ptr+1)gibt uns das vierte Element. In ähnlicher Weise *(ptr-1)gibt uns das Drucken das zweite Element.

Interessante Beiträge...