Tout d'abord, la bonne nouvelle : le type de a
est équivalent à char **
donc vous passez un paramètre valide à myFunc()
.
Le premier problème est que %c
est un spécificateur de format qui signifie imprimer un seul caractère. Puisque **P
est une expression qui s'évalue à un seul caractère, votre première version fait exactement ce que vous lui avez demandé de faire. Ce n'est pas ce que vous voulez.
La deuxième version est proche de la syntaxe correcte. Elle devrait se lire printf("%s", *P)
, donde *P
est une expression qui évalue un pointeur vers une chaîne ASCII à terminaison nulle. Dans ce cas, il s'agit de "Do". Cette version n'imprimera pas les deux chaînes.
Même s'il est vrai que le nom d'un tableau est identique à un pointeur vers son premier élément, il s'agit d'une sorte de "mensonge aux étudiants". Passer un tableau à une fonction ne transmet pas et ne peut pas transmettre la longueur du tableau. Pour cela, il faut soit un second argument contenant la longueur, soit une convention comme le nul-terminateur sur une chaîne de caractères pour indiquer la fin du tableau. Avec ce changement, vous pouvez modifier myFunc()
pour utiliser une boucle sur les éléments passés et imprimer chacun d'entre eux.