Envoyé par
Array
1) J'ai récemment vu un exemple de source en C, et j'y ai noté quelque chose. De cet exemple, j'ai sauté à une conslusion : Lorsque l'on communique entre fonctions, la fonction appelée ne peut modifier une variable de la fonction appelante. Toutefois, cette règle ne s'applique pas pour les tableaux.
La différence entre les tableaux et les valeurs normales, c'est que les tableaux ne sont jamais copié contrairement aux autres valeurs, on transmet l'adresse du premier élément ce qui fait qu'une fonction agit directement sur le tableau et non pas sur une copie. Cela correspond à modifier les données pointées par un pointeur passé en paramètre. Le pointeur étant une variable "normale" sa valeur est copiée dans l'espace mémoire de la fonction appelée, mais comme deux pointeurs ayant la même valeur pointent sur le même espace, l'espace pointée peut-être modifiée par la fonction appelée et les modifications seront visible dans la fonction appelante.
Envoyé par
Array
2) '\0' doit être présent dans un tableau de caractères, car il indique la fin de ce tableau.
Pas exactement, en fait '\0' correspond au caractère final d'une chaîne de caractère C, le tableau peut faire 800 caractères, si le 5ème caractères et un '\0', alors la chaîne ne fait que 4 caractères (le caractère NUL n'est pas comptée).
Envoyé par
Array
3) On peut déclarer un tableau sans spécifier sa taille seulement dans une déclaration d'argument propre à une fonction.
Oui, mais à condition de l'initialiser, ce que tu mets dans tes exemples est faux et risque de se retourner contre toi. En revanche, si tu écris ça :
int monTableau[] = {5, 10, 15, 0, 2, 4};
Alors le compilateur créera un tableau de taille 6 et y mettra les valeurs que tu indiques. De même, si tu écris ceci :
char maChaine[] = "awezgaga";
Tu auras un tableau de char de longueur 9, c'est-à-dire 8 caractères imprimables + le caractère NUL final. Mais ceci :
a sans doute un comportement indéfini, et les comportements indéfinis sont à fuir comme la peste...
Partager