webentwicklung-frage-antwort-db.com.de

Was ist die Funktion eines Sterns vor einem Funktionsnamen?

Ich war verwirrt mit dem, was ich in den meisten C-Programmen sehe, die für mich eine ungewohnte Funktionsdeklaration haben.

void *func_name(void *param){
    ...
}

Was macht * implizieren für die Funktion? Mein Verständnis von (*) Bei einem Variablentyp wird ein Zeiger auf eine andere Variable erstellt, sodass nachverfolgt werden kann, an welcher Adresse die letztere Variable im Speicher gespeichert ist. Aber in diesem Fall einer Funktion, ich weiß nicht, was das * Asterisk impliziert.

60
Aldee

Das Sternchen gehört zum Rückgabetyp und nicht zum Funktionsnamen, d. H .:

void* func_name(void *param) { . . . . . }

Dies bedeutet, dass die Funktion einen ungültigen Zeiger zurückgibt.

71
NPE

Das * bezieht sich auf den Rückgabetyp der Funktion, nämlich void *.

Wenn Sie eine Zeigervariable deklarieren, ist es dasselbe, das * Neben den Variablennamen oder den Variablentyp zu setzen:

int *a;
int* a;

Ich persönlich halte die erste Wahl für klarer, denn wenn Sie mehrere Zeiger mit dem Trennzeichen , Definieren möchten, müssen Sie das Zeichen * Jedes Mal wiederholen:

int *a, *b;

Die Verwendung der "typnahen Syntax" kann in diesem Fall irreführend sein, denn wenn Sie schreiben:

int* a, b;

Sie deklarieren einen Zeiger auf int (a) und ein int (b).

Sie werden diese Syntax also auch in Funktionsrückgabetypen finden!

17
Vincenzo Pii

Das * gehört zum Rückgabetyp. Diese Funktion gibt void *, ein Zeiger auf einen Speicherort eines nicht angegebenen Typs.

Ein Zeiger ist ein Variablentyp für sich, der die Adresse eines Speicherorts als Wert hat. Die verschiedenen Zeigertypen in C stellen die verschiedenen Typen dar, von denen Sie erwarten, dass sie sich an dem Speicherort befinden, auf den sich die Zeigervariable bezieht. Also ein int * soll sich auf einen Ort beziehen, der als int interpretiert werden kann. Aber ein void * ist ein Zeigertyp, der sich auf einen Speicherort eines nicht angegebenen Typs bezieht. Sie müssen einen solchen ungültigen Zeiger setzen, um auf die Daten an dem Speicherort zugreifen zu können, auf den er verweist.

10
x4u

Dies bedeutet, dass die Funktion ein void*.

5
hmjd