Passer une chaîne à une fonction en C – avec ou sans pointeurs?

Quand je passe une chaîne à la fonction, parfois, j’utilise

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

et parfois je l’utilise sans pointeurs (par exemple:

 char functionname(char ssortingng[256]) 

Ma question est la suivante: quand dois-je utiliser des pointeurs? Souvent, j’écris des programmes sans pointeur et ça marche, mais parfois non.

La convention acceptée de passer des C-ssortingngs à des fonctions est d’utiliser un pointeur:

 void function(char* name) 

Lorsque la fonction modifie la chaîne, vous devez également indiquer la longueur:

 void function(char* name, size_t name_length) 

Votre premier exemple:

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

passe un tableau de pointeurs sur des chaînes qui n’est pas ce dont vous avez besoin.

Votre deuxième exemple:

 char functionname(char ssortingng[256]) 

passe un tableau de caractères. La taille du tableau ici n’a pas d’importance et le paramètre va décroître en un pointeur de toute façon, cela équivaut donc à:

 char functionname(char *ssortingng) 

Voir aussi cette question pour plus de détails sur les arguments de tableau en C.

En supposant que vous vouliez écrire

 char *functionname(char *ssortingng[256]) 

Ici, vous déclarez une fonction qui prend un tableau de 256 pointeurs à char en argument et renvoie un pointeur à char. Ici, d’autre part,

 char functionname(char ssortingng[256]) 

Vous déclarez une fonction qui prend en argument un tableau de 256 caractères et renvoie un caractère.

En d’autres termes, la première fonction prend un tableau de chaînes et renvoie une chaîne, tandis que la seconde utilise une chaîne et renvoie un caractère.

Un tableau est un pointeur. Il pointe vers le début d’une séquence “d’objects”.

Si nous faisons cela: ìnt arr[10]; , alors arr est un pointeur sur un emplacement mémoire, à partir duquel suivent dix entiers. Ils ne sont pas initialisés, mais la mémoire est allouée. C’est exactement la même chose que de faire int *arr = new int[10]; .