Vous êtes sur la page 1sur 4

Tableaux la C

V. Lepetit, J. Sam, et J.-C. Chappelier

Comme mentionn dans le cours sur les tableaux, en plus des types vector et array, on peut utiliser en C++ des tableaux la C , cest--dire les tableaux comme dnis par le langage C. Ces tableaux sont des tableaux de taille xe, et ont de nombreuses limitations. Contrairement aux types vector et array : ils nont pas connaissance de leur propre taille, cest--dire quon ne dispose pas de fonction similaire la fonction size ; ils ne peuvent tre manipuls globalement, cest--dire quon ne peut par exemple pas faire daffectations telles que : tab1 = tab2; ; ils ne peuvent pas tre retourns par une fonction ; ils ont une syntaxe dinitialisation diffrente des autres types, cest--dire quon ne peut pas utiliser la syntaxe avec des parenthses comme ({1, 2, 3}). De plus, quand ils sont utiliss en paramtre dune fonction, ils sont forcment passs par rfrence. Cependant, ils sont encore souvent utiliss en pratique.

Dclaration et initialisation
La dclaration dun tableau la C suit la syntaxe suivante : type_des_lments nom_du_tableau[nombre_d_lments]; Par exemple : int T[5]; dclare un tableau T de 5 int. On peut initialiser les lments dun tableau la C en faisant par exemple : int T[5] = {1, 2, 3, 4, 5}; La taille des tableaux la C doit tre connue la compilation, cest--dire quon ne peut pas crire par exemple : 1

cin >> N; int T[N];

// NON !

Accder aux lments du tableau


Les lments dun tableau la C se manipulent de la mme faon que les lments des types vector et array, par exemple : T[3] = 10; T[2] = 2 * T[3] + T[1]; Comme pour vector et array, lindice du premier lment est 0. En C++11, on peut aussi utiliser les itrations sur ensemble de valeurs comme pour les types vector et array, par exemple : int T[3] = {1, 2, 3}; for(int val : T) { cout << val << ", "; }

Taille du tableau
Il nexiste pas dquivalent de la fonction size pour les tableaux la C , cest--dire quon ne peut pas crire quelque chose comme T.size() pour obtenir la taille du tableau. En pratique, on utilise souvent une constante pour dnir la taille du tableau, par exemple : const int NB = 3; int T[NB] = {1, 2, 3}; cout << "Dernier element de T : " << T[NB - 1] << endl;

Attention
Attention ne pas confondre : la dclaration dun tableau la C , et laccs un lment du tableau. Les deux scrivent avec le nom du tableau suivi dune valeur entre crochets, mais ils font des choses trs diffrentes. int T[5]; 2

est une dclaration de tableau. 5 est la taille du tableau : on dclare un tableau de 5 lments. T[2] = 0; accde un lment. 2 est lindice de llment : on affecte 0 llment dindice 2.

Tableaux multi-dimensionnels la C
Les tableaux la C peuvent avoir plusieurs dimensions. Par exemple : int M[3][4][4]; int N[3][2] = { {1, 2}, {3, 4}, {5, 6} }; M[1][2][0] = N[1][0];

Tableaux la C en paramtre
Un tableau la C en paramtre est forcment pass par rfrence, SANS utiliser le symbole &. Par exemple, la fonction : void f(int T[5]) { for(int i(0); i < 5; ++i) { T[i] = T[i] + 1; } } ajoute 1 aux lments du tableau pass en argument. Le code : int N[5] = { 4, 3, 1, 0, 2 }; f(N); for(int i(0); i < 5; ++i) { cout << N[i] << ", "; } afche : 5, 4, 2, 1, 3, En fait, le 5 dans len-tte de la fonction f 3

void f(int T[5]) nest pas utilis par le compilateur. On peut galement crire : void f(int T[]) et aussi : void f(int * T) avec exactement le mme rsultat. La raison sort du cadre de ce cours (mais notez quelle fait appel aux pointeurs la C qui sont mentionns lors du cours de la semaine 6). La fonction f ne connait donc pas la taille du tableau pass en argument. En pratique, la taille du tableau est souvent passe en argument galement, par exemple : void f(int T[], int taille) { for(int i(0); i < taille; ++i) { T[i] = T[i] + 1; } } ... int N[5] = { 4, 3, 1, 0, 2 }; f(N, 5); int N2[3] = { 3, 0, 2 }; f(N2, 3);