Linux C Programmierung Tutorial Teil 19: Pointer und Arrays

Bislang haben wir in dieser laufenden C-Programmier-Tutorialreihe kurz die Grundlagen von Pointern diskutiert. Es gibt jedoch noch einige weitere Pointer-bezogene Konzepte, die diskutiert werden müssen. Daher werden wir in diesem Tutorial das Konzept der Pointer und Arrays diskutieren.

Bevor wir mit Zeigern und Arrays beginnen, lassen Sie uns schnell das Grundkonzept der Zeiger selbst aktualisieren. Pointer sind eine spezielle Art von Variablen, die Adressen enthalten können. So kann beispielsweise ein Pointer’ptr‘ auf ein Zeichen wie folgt deklariert werden;

char *ptr;

Und du kannst das Ampersand Zeichen verwenden, um eine Adresse darin zu speichern. Hier ist ein Beispiel:

char c = 'a';
ptr = &c;

Der Zeiger ‚ptr‘ enthält nun die Adresse der Variablen ‚c‘. Alternativ können Sie auch sagen, dass ‚ptr‘ nun auf die Variable ‚c‘ zeigt.

Um auf den Wert der Variablen zuzugreifen oder zu manipulieren, auf die der Zeiger zeigt, können Sie den Operator * verwenden. Um beispielsweise den Wert der Variablen c von ‚a‘ auf ‚b‘ zu ändern, können Sie den Zeiger ‚ptr‘ wie folgt verwenden:

*ptr = 'b';

Das folgende Programm soll Ihnen einen besseren Überblick über diese grundlegenden Pointer-Konzepte geben, die wir bisher diskutiert haben:

#include <stdio.h>

int main()
{
char c = ‚a‘;
char *ptr = &c;

*ptr = ‚b‘;

printf („variable c = %c“, c);

return 0;
}

Hier ist die Ausgabe dieses Programms:

variable c = b

Damit Sie mit einem Zeiger sehen können, wurde der Wert einer Variablen geändert.

Zeiger und Arrays

Da Sie mehr und mehr Zeit damit verbringen werden, C-Code zu schreiben und zu lesen, werden Sie feststellen, dass Pointer und Arrays oft zusammen verwendet werden. So können Sie beispielsweise mit einem Zeiger auf einzelne Elemente eines Arrays zugreifen. Betrachten Sie das folgende Stück Code:

...
...
...
char arr[] = {'a','b','c','d','e'}
char *ptr;
ptr = &arr[0]
...
...
...

Hier zeigt der Zeiger ‚ptr‘ auf das erste Element des Arrays ‚arr‘, das, wenn Sie in Form von Indizes sprechen, an der Position Null des Arrays sitzt. Nun können Sie mit dem *-Operator mit ‚ptr‘ auf den Wert zugreifen/manipulieren, auf den der Zeiger zeigt.

Weiter geht es, sobald Sie einen Zeiger haben, der auf das erste Element eines Arrays zeigt, ist es einfach, auch auf andere Elemente des Arrays zuzugreifen. Zum Beispiel, wenn Sie – im Kontext des obigen Codeausschnitts – den folgenden Ausdruck überall verwenden:

*(ptr+1)

dann können Sie auf das zweite Element des Arrays zugreifen, was Sie normalerweise auf folgende Weise tun:

arr[1]

So effektiv, das Hinzufügen von 1 zu’ptr‘ Takes zur Adresse des nächsten Elements im Array, und mit * können Sie auf den an dieser Adresse gespeicherten Wert zugreifen. Ebenso führt das Hinzufügen von 2 zum dritten Element…. so weiter und so fort.

Hier ist ein Programm, das Ihnen eine klarere Vorstellung davon geben soll, was wir gerade besprochen haben:

#include <stdio.h>

int main()
{
char arr[] = {‚a‘,’b‘,’c‘,’d‘,’e‘};
char *ptr = &arr[0];

for(int i=0;i<strlen(arr);i++)
printf („arr[%d] is %c \n“, i, *(ptr+i));

return 0;
}

Und hier ist die Ausgabe:

arr[0] is a 
arr[1] is b 
arr[2] is c 
arr[3] is d 
arr[4] is e

Sie sehen also, der Ausdruck’*(ptr+i)‘ – mit i von 0 bis zum letzten Index im Array – erlaubte uns den Zugriff auf alle Elemente des Arrays.

HINWEIS 1: Der Name des Arrays, wenn er im Code verwendet wird, gibt Ihnen die Basisadresse des Arrays an. Das bedeutet, dass der Name des Arrays und die Adresse des ersten Elements ein und dasselbe ist. Im Kontext eines Arrays sind also arr‘, &arr[0]‘ und arr‘ ein und dasselbe. Dies gilt auch für andere Elemente, d.h. &arr[2] kann auch als (arr+2) geschrieben werden und so weiter.

HINWEIS 2: In Erweiterung dessen, was wir in der obigen Anmerkung besprochen haben, kann jede Array-Elementdarstellung auf die Zeigerdarstellung heruntergebrochen werden. Zum Beispiel: arr[2] entspricht ‚*(arr + 2)‘.

HINWEIS 3: Sie können zwar einem Zeiger eine Array-Adresse zuweisen, umgekehrt ist dies jedoch nicht gültig. Im Gegensatz zu Zeigern können Sie auch keine ++ oder — Operatoren mit Array-Namen verwenden. Generell können Sie die Adressen, an denen sich Array-Elemente ursprünglich befinden, nicht ändern.

Fazit

Dieses Tutorial konzentrierte sich auf das Konzept von Pointer und Arrays, wie sie zusammenhängen und wie Array-Elemente über Pointer angesprochen werden können. Gegen Ende haben wir auch einige wichtige Punkte besprochen, wenn es um Code geht, der Pointer auf Arrays verwendet.

Probieren Sie diese Konzepte lokal auf Ihrer Maschine aus, um eine bessere Vorstellung davon zu bekommen, wie diese Dinge funktionieren, und lassen Sie im Zweifelsfall einen Kommentar unten.

Das könnte dich auch interessieren …