Hallo Flaming Moe,
Kann mir jemand ein (möglichst simples) Beispiel nennen, das
mir veranschaulicht, dass Zeiger tatsächlich nötig sein
können?
Wo zeiger in C ‚nötig‘ sind, läßt sich
klar sagen:
Bei der Rückgabe von
- Feldern
- Funktionen
aus Funktionen.
Das erlaubt C imho nicht.
Ansonsten kann man Zeiger häufig durch
direkte Indizierung in ein Array mit
Werten (über den Integer-Index) umgehen.
In manchen Fällen führt das zu verbesserten
Programmen, in manchen nicht.
Beispiel:
#include
/\*
const char ( funktion\_1() ) []
{
static char char\_array[100] = "wichtige Daten #1";
return char\_array;
}
\*/
const char \* funktion\_2()
{
static char char\_array[100] = "wichtige Daten #2";
return char\_array;
}
const char (\* funktion\_3() ) []
{
static char char\_array[100] = "wichtige Daten #3";
return &char\_array;
}
int main()
{
/\*
puts ( funktion\_1() );
\*/
puts ( funktion\_2() );
puts ( \*funktion\_3() );
return 0;
}
Wir versuchen in diesem Beispiel, das
char-array ‚direkt‘, also als Feld
zurückzugeben, um es auszudrucken.
Das geht nicht. funktion_1 liefert: ‚cannot return array‘
als Compilerfehler.
Wir könnten nun versuchen, einfach die Feldadresse
von char-array in eine Variable zu kopieren und
diese zurückzuliefern - also einen Zeiger zu verwenden.
Das geht, siehe funktion_2.
Wollen wir aber wirklich das array char_array
herausholen, benutzen wir einen zeiger auf das Feld
selbst, die Dereferenzierung 'puts ( *funktion_3() );
liefert uns das Feld, welches wir ausdrucken können.
Grüße
CMБ