Main menu:

Site search

Categories

mars 2008
L M M J V S D
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Archive

C++ – Un tableau comme argument d’une fonction

char *c;
char c[16];

Ces deux déclarations déclarent deux variables de types différents. La première déclare un pointeur de caractère. La seconde déclare un tableau de caractères. Pour s’en convaincre, il suffit de voir que sizeof() appliqué aux deux variables donne des résultats différents. 4 pour le premier et 16 pour le second (sur ma machine, ça pourrait être différent sur la vôtre).

Par contre, ces quatre fonctions déclarent exactement la même fonction. Il n’y a aucune différence entre les quatre.

void f(char *c);
void f(char c[]);
void f(char c[16]);
void f(char c[32]);

A l’intérieur des crochets, le nombre ne sert à rien. Il peut être considéré juste comme une indication pour l’utilisateur de la fonction.
Un tableau en paramètre d’une fonction est converti en pointeur automatiquement. C’est pourquoi, il n’y a pas de différence entre les quatre fonctions.

Vous pouvez même passer à la fonction une chaîne littérale parce qu’il existe une conversion de tableau de caractères constants vers pointeur de caractère. En réalité, vous passez à la fonction l’adresse de la chaîne de caractères.

f("une chaîne de caractères");    // OK

A l’intérieur de la fonction f, c est vraiment un pointeur. Les trois fonctions ci-dessous donnent le même résultat.

void f1(char *c)
{
  std::cout<<"size of c in f1: "<<sizeof(c)<<std::endl;
}

void f2(char c[])
{
  std::cout<<"size of c in f2: "<<sizeof(c)<<std::endl;
}

void f3(char c[32])
{
  std::cout<<"size of c in f3: "<<sizeof(c)<<std::endl;
}

int main()
{
  char c[10];
  std::cout<<"size of c[10]: "<<sizeof(c)<<std::endl;
  f1(c);
  f2(c);
  f3(c);

  return 0;
}