it-swarm.com.de

String an eine Funktion in C übergeben - mit oder ohne Zeiger?

Wenn ich einen String an die Funktion weitergebe, benutze ich manchmal

char *functionname(char *string name[256])

und manchmal verwende ich es ohne Zeiger (zum Beispiel:

char functionname(char string[256])

Meine Frage ist, wann muss ich Zeiger verwenden? Oft schreibe ich Programme ohne Zeiger und es funktioniert, manchmal aber nicht. 

19
Zen Cicevic

Die übliche Konvention der Übergabe von C-Strings an Funktionen ist die Verwendung eines Zeigers:

void function(char* name)

Wenn die Funktion die Zeichenfolge ändert, sollten Sie auch die Länge übergeben:

void function(char* name, size_t name_length)

Dein erstes Beispiel: 

char *functionname(char *string name[256])

übergibt ein Array von Zeigern an Strings, was Sie gar nicht brauchen.

Dein zweites Beispiel:

char functionname(char string[256])

übergibt ein Array von Zeichen. Die Größe des Arrays spielt hier keine Rolle und der Parameter wird ohnehin in einen Zeiger zerfallen, daher entspricht dies:

char functionname(char *string)

Siehe auch diese Frage für weitere Details zu Array-Argumenten in C.

33
Adam Zalcman

Angenommen, Sie wollten schreiben

char *functionname(char *string[256])

Hier deklarieren Sie eine Funktion, die ein Array von 256 Zeigern als Argument auf char nimmt und einen Zeiger auf char zurückgibt. Hier auf der anderen Seite

char functionname(char string[256])

Sie deklarieren eine Funktion, die ein Array von 256 chars als Argument akzeptiert und eine char zurückgibt.

Mit anderen Worten, die erste Funktion nimmt ein String-Array und gibt einen String zurück, während die zweite Funktion einen String und ein Zeichen zurückgibt.

1
Nicola Musatti

Ein Array ist ein Zeiger. Es zeigt auf den Beginn einer Folge von "Objekten".

Wenn wir dies tun: ìnt arr[10];, ist arr ein Zeiger auf einen Speicherort, von dem zehn Ganzzahlen folgen. Sie sind nicht initialisiert, aber der Speicher ist belegt. Es ist genau das gleiche wie int *arr = new int[10];.

0
Anickyan