You are on page 1of 2

int tab[10];

Adresse et tableaux en C/C++ Cration de 10 variables contigus de type entier :


tab[0], tab[1], .., tab[9]

Dans le monde merveilleux de lalgorithmique : Mais lidentificateur tab utilis seul dsigne ladresse de
tab : tableau[1..10] de entier tab[0]
Cration de 10 variables contigus de type
entier : tab[1], tab[2], .., tab[10] tab correspond &tab[0]
Et tab dsigne la variable compose des 10 Plus gnralement :
&tab[i] est quivalent tab+i
variables prcdentes
et tab[i] est quivalent *(tab+i)
Attention :
Les tableaux du C et du C++ ne correspondent Attention : Pas de contrle des dbordements possibles
pas une mise en uvre fidle de ce concept
ex : tab[10]=5; //Quest-ce que tab[10]???
LIF5 - 2004-2008 R. Chaine 1 LIF5 - 2004-2008 R. Chaine 2

Pensez-vous que le fragment de programme suivant


soit correct ? Remarque :
La taille dun tableau doit correspondre une
char t1[3]; constante entire
char t2[3]; (ie) valeur connue la compilation
(C89et90,C++98)
t1=t2;
int tab[4];
int tabat[]={2,4,6}; // taille 3 dduite de linitialisation

const int n=5; //n initialis (dfinitivement)


//avec une constante entire
double dab[n]; //Oui en C++98,
//mais pas en C89 et 90
LIF5 - 2004-2008 R. Chaine 3 LIF5 - 2004-2008 R. Chaine 4

Passage dun tableau en argument Mise en oeuvre de procdures en C ou C++


dune fonction C ou C++
Mise en uvre du passage en paramtre
void proc(int tab[2]) tab paramtre formel
{ de type adresse du premier donne dun tableau, prcise par le
lment dun tableau de int qualificatif const
} (ie) adresse dune variable de void proc(const int *tab) {}
On aurait pu crire : type int
void proc(int tab[]) ou
{ void proc(const int tab[]) {}
Au moment de lappel :
Une adresse (de premier Mise en uvre du passage en paramtre
}
ou alors lment dun tableau) est donne-rsultat ou rsultat dun tableau
void proc(int * tab) fournie et copie sur la pile
{ ex: void proc(int *tab) {}
int tabat[2]; ou void proc(int tab[]) {}
} proc(tabat);
LIF5 - 2004-2008 R. Chaine 5 LIF5 - 2004-2008 R. Chaine 6

1
Retour dun tableau dans une Arrgghhh! Retour de ladresse dun tableau local la
fonction (dtruit aprs lappel la fonction)
fonction C ou C++
Seule possibilit :
Que pensez-vous de la fonction suivante ? Retourner un tableau allou dans le tas !
int * doubler(const int tab[3])
// Prcondition : tab tableau d(au moins) 3 int initialiss
int * doubler(const int tab[3]) // Rsultat : adresse dun tableau de 3 int
{ // Charge lutilisateur de stocker cette adresse
// dans une variable et dinvoquer loprateur
int res[3]; // delete []sur cette variable quand il naura plus
for (int i=0;i<3;i++) // besoin du tableau
res[i]=2*tab[i]; {
int *res=new int[3];
return res; for (int i=0;i<3;i++)
res[i]=2*tab[i];
} return res;
LIF5 - 2004-2008 R. Chaine 7
} LIF5 - 2004-2008 R. Chaine 8

Chanes de caractres
Exemple dutilisation :
Les tableaux de char C/C++ servent galement manipuler
des chanes de caractres
int montab[]={1,2,3}; (de taille infrieure celle du tableau)
int *ptr; Possibilit dutiliser des fonctions de la bibliothque standard
ptr=doubler(montab); si \0 en fin de la chane (convention)

ptr[0]=4; Cration dun tableau de 6 char pour y stocker des chanes


dau plus 5 char :
.
char ch[6];
delete [] (ptr);
ch[0]=i; ch[1]=f; ch[2]=5; ch[3]=\0;
std::cout << ch << std::endl;

LIF5 - 2004-2008 R. Chaine 9 LIF5 - 2004-2008 R. Chaine 10

Initialisation la dfinition des Attention :


char a;
chanes de caractres Bien faire la diffrence entre a, a et a
Manipulation des chanes de caractres :
1. Comme les autres tableaux Bibliotheque string
char ch1[]={b,i,c,h,e,\n,\0}; (#include <cstring> (C++) ou (#include <string.h> (C))
ch1 de taille 7
Par les fonctions de lecture/criture
b i c h e \n 0 sur entre/sortie standard (iostream, stdio)

char ch2[8]={o,u,i,0}; char ch[10];


std::cin >> ch ;
std::cout << ch << std::endl;
o u i \0
std::scanf(%s,ch);
2. Avec une chane littrale std::printf(%s,ch);
char ch3[]=loup;
Attention aux dpassements mmoire!
ch3 de taille 5 std::scanf(%9s,ch); // Un moyen de sen prmunir
std::fgets(ch,10,stdin)
l o u p \0
LIF5 - 2004-2008 R. Chaine 11 LIF5 - 2004-2008 R. Chaine 12

You might also like