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.
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.
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!
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.
Cela signifie que la fonction renvoie un void*
.