1/ int *fonction(int *pointeur);
L´* après le premier int a la même signification que l´étoile après le second int : ta fonction retourne un pointeur sur un entier.
Par exemple :
int *fonction(int *pointeur)
{
return pointeur;
}
2/ const Chat * const fonction(const Chat * const leChat);
Ca fonctionne un peu comme la ligne précédente : ta fonction accepte en paramètres un pointeur et retourne un pointeur.
La difficulté d´interprétation provient ici des "const".
Tu peux les utiliser de 4 manières différentes avec des pointeurs :
Chat *leChat = ...;
C´est un pointeur non constatnt sur une variable non constante, autrement dit tu peux modifier la valeur des données pointées, en déréférencant :
Soient int variable = 2, *entier = &variable;
Tu peux écrire :
Sans problème.
Mais tu peux aussi modifier l´objet vers lequel pointe le pointeur :
Soient int var1, var2, *entier = &var1;
Tu peux écrire :
entier = &var1;
Sans erreur. Autrement dit tu peux changer l´addresse de pointage du pointeur.
const Chat *leChat = ...;
Il s´agit d´un pointeur constant vers de données non constantes, autrement dit tu ne peux plus modifier l´addresse vers laquelle pointe le pointeur (comme avec entier = &var2 avant), mais tu peux quand même modifier la valeur pointée (avec *entier = 3; avant).
Un exemple courant de pointeur constant : les tableaux. Un nom de tableau est en fait uèn pointeur constant vers le premier élément du tableau. Tu peux bien sûr modifier la valeur des éléments, mais pas l´addresse pointée par ce pointeur.
Chat *const leChat = ...;
Il s´agit d´un pointeur non constant sur des données constantes, autrement dit tu peux modifier la valeur pointée par le pointeur en luiaffectant l´addresse d´un objet, mais tu ne pourras pas modifier la valeur des objets par le biais de ce pointeur.
const Chat * const leChat = ...;
Pointeur constant sur des données constantes : tu ne peux ni moidifier l´addresse vers laquelle pointe le pointeur, ni modifier la valeur des objets pointés par le biais de ce pointeur.
3/ const Chat & fonction(const Chat & leChat);
Les références sont une spécificité du C++ qui n´existent pas en C. Ca fonctionne un peu comme les pointeurs, mais en plus simple. Un référence te perrmet en fait de créer un alias d´une variable. Autrement dit dans ta fonction d´exmple, const Chat & leChat signifie en fait que leChat désignera la valeur passée en argument. Si tu n´avait pas mis le &, l´objet aurait été recopié intégralement dans la variable leChat lors de l´appel. Avec la référence, non : leChat désigne la valeur passée en argument elle même.
Ca fonctionne pareil pour la valeur de retour : ta fonction renvoie une référence.
Quand au mot clé const, utilisé à cet endroit il signifie que ta référence est constante, i.e. que tu ne peux pas changer l´"addresse vers laquelle elle pointe".
Le références sont un peu un stade intermédiaire entre les variable et les pointeurs.
L´avantage, c´est que si tu désires créer une fonction qui prends une classe avec beaucoup de variables membre en argument, le passage par référence évite de recopier toutes les valeurs lors de l´appelle de la fonction, ce qui prends énormément de temps.
Et tu n´as pas à t´excuser, il est d´autant plus agréable de répondre à ta question que celle-ci est bien formulée 