web-dev-qa-db-fra.com

Quelle est la fonction d'un astérisque devant un nom de fonction?

J'ai été confondu avec ce que je vois sur la plupart des programmes C qui a une déclaration de fonction inconnue pour moi.

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

Qu'est-ce que * impliquer pour la fonction? Ma compréhension de (*) dans un type de variable, c'est qu'il crée un pointeur vers une autre variable, il peut donc être en mesure de suivre l'adresse à laquelle cette dernière variable est stockée dans la mémoire. Mais dans ce cas d'une fonction, je ne sais pas ce que cela * l'astérisque implique.

60
Aldee

L'astérisque appartient au type de retour et non au nom de la fonction, c'est-à-dire:

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

Cela signifie que la fonction renvoie un vide pointeur.

71
NPE

Le * fait référence au type de retour de la fonction, qui est void *.

Lorsque vous déclarez une variable pointeur, c'est la même chose que de mettre le * proche du nom de la variable ou du type de variable:

int *a;
int* a;

Personnellement, je considère le premier choix plus clair car si vous souhaitez définir plusieurs pointeurs à l'aide du , séparateur, vous devrez répéter le * chaque fois:

int *a, *b;

L'utilisation de la syntaxe "close to type" peut être trompeuse dans ce cas, car si vous écrivez:

int* a, b;

Vous déclarez un pointeur sur int (a) et un int (b).

Ainsi, vous trouverez également cette syntaxe dans les types de retour de fonction!

17
Vincenzo Pii

Le * appartient au type de retour. Cette fonction renvoie void *, un pointeur vers un emplacement mémoire de type non spécifié.

Un pointeur est un type de variable en lui-même qui a pour adresse la valeur d'un emplacement de mémoire. Les différents types de pointeurs en C représentent les différents types auxquels vous vous attendez à l'emplacement de mémoire auquel la variable de pointeur fait référence. Donc un int * devrait faire référence à un emplacement qui peut être interprété comme int. Mais un void * est un type de pointeur qui fait référence à un emplacement mémoire de type non spécifié. Vous devrez lancer un tel pointeur vide pour pouvoir accéder aux données à l'emplacement de mémoire auquel il se réfère.

10
x4u

Cela signifie que la fonction renvoie un void*.

5
hmjd