Beziehung zwischen Arrays und Zeigern in C verstehen
Beziehung zwischen Arrays und Zeigern
In diesem Tutorial lernen Sie die Beziehung zwischen Arrays und Zeigern in der C-Programmierung kennen. Sie erfahren auch, wie Sie mit Zeigern auf Array-Elemente zugreifen.
Bevor Sie die Beziehung zwischen Arrays und Zeigern lernen, sollten Sie diese beiden Themen prüfen:
- C Arrays
- C Zeiger
Beziehung zwischen Arrays und Zeigern
Ein Array ist ein Block sequentieller Daten. Schreiben wir ein Programm, das die Adressen der Array-Elemente ausgibt.
#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("Address of array x: %p", x);
return 0;
}
Ausgabe
&x[0] = 1450734448 &x[1] = 1450734452 &x[2] = 1450734456 &x[3] = 1450734460 Address of array x: 1450734448
Es gibt einen Unterschied von 4 Bytes zwischen zwei aufeinanderfolgenden Elementen des Arrays x. Das liegt daran, dass die Größe von int 4 Bytes beträgt (auf unserem Compiler).
Beachten Sie, dass die Adresse von &x[0] und x identisch ist. Das liegt daran, dass der Variablenname x auf das erste Element des Arrays verweist.

Aus dem obigen Beispiel geht hervor, dass &x[0] äquivalent zu x ist. Und x[0] ist äquivalent zu *x.
Ebenso:
&x[1]ist äquivalent zux+1undx[1]ist äquivalent zu*(x+1).&x[2]ist äquivalent zux+2undx[2]ist äquivalent zu*(x+2).- ...
- Grundsätzlich ist
&x[i]äquivalent zux+iundx[i]ist äquivalent zu*(x+i).
Beispiel 1: Zeiger und Arrays
#include <stdio.h>
int main() {
int i, x[6], sum = 0;
printf("Enter 6 numbers: ");
for(i = 0; i < 6; ++i) {
// Äquivalent zu scanf("%d", &x[i]);
scanf("%d", x+i);
// Äquivalent zu sum += x[i]
sum += *(x+i);
}
printf("Sum = %d", sum);
return 0;
}
Wenn Sie das Programm ausführen, lautet die Ausgabe:
Enter 6 numbers: 2 3 4 4 12 4 Sum = 29
Hier haben wir ein Array x mit 6 Elementen deklariert. Um auf die Elemente des Arrays zuzugreifen, haben wir Zeiger verwendet.
In den meisten Kontexten zerfallen Arraynamen zu Zeigern. Einfach ausgedrückt: Arraynamen werden in Zeiger konvertiert. Deshalb können Sie Zeiger verwenden, um auf Array-Elemente zuzugreifen. Sie sollten sich jedoch merken, dass Zeiger und Arrays nicht dasselbe sind.
Es gibt einige Fälle, in denen Arraynamen nicht zu Zeigern zerfallen. Um mehr zu erfahren, besuchen Sie: Wann zerfällt ein Arrayname nicht in einen Zeiger?
Beispiel 2: Arrays und Zeiger
#include <stdio.h>
int main() {
int x[5] = {1, 2, 3, 4, 5};
int* ptr;
// ptr wird die Adresse des dritten Elements zugewiesen
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;
}
Wenn Sie das Programm ausführen, lautet die Ausgabe:
*ptr = 3 *(ptr+1) = 4 *(ptr-1) = 2
In diesem Beispiel wird &x[2], die Adresse des dritten Elements, dem ptr-Zeiger zugewiesen. Daher wurde 3 angezeigt, als wir *ptr ausgaben.
Und die Ausgabe von *(ptr+1) gibt uns das vierte Element. Ebenso gibt die Ausgabe von *(ptr-1) das zweite Element.
C Sprache
- Big Data und Cloud Computing: Wie sie zusammenarbeiten
- C++ Zeiger und Arrays: Die Beziehung meistern
- C-Programmierung: Adressen & Zeiger an Funktionen übergeben – Praxisleitfaden
- C-Structs und Zeiger meistern: Praxisleitfaden
- Spannungs-Strom-Ungleichgewicht bei Elektromotoren verstehen: Ursachen und Fehlersuche
- Wie IoT und Edge Computing sich gegenseitig ergänzen
- SCADA vs. HMI: Wesentliche Unterschiede und ihre Rolle in Industry 4.0
- DC- vs. AC-Motoren: Wichtige Unterschiede & Kaufberatung
- Hartlöten vs. Weichlöten: Metallurgische Unterschiede und Praxiseinsatz
- Zweitakt- vs. Viertaktmotoren: Wichtige Unterschiede erklärt