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 int
4 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 zux+1
undx(1)
ist äquivalent zu*(x+1)
.&x(2)
ist äquivalent zux+2
undx(2)
ist äquivalent zu*(x+2)
.- …
- Grundsätzlich
&x(i)
ist äquivalent zux+i
undx(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 3
wurde 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.