Tableaux (1) |
// Définition de tableaux à une dimension |
int t[10]; |
// Définition de tableaux à deux dimensions |
float t[5][10]; |
// Tableau de taille 4 déterminée |
// par la liste d'initialisation |
int t[]={0,1,2,3}; |
int matrice[2][3] = {{1,2,3},{4,5,6}}; |
Tableaux (2) |
int t[10]; | |
--> t[0] t[1] ...t[9] THE END !!! |
|
float t[5][10]; | |
--> |
t[0][0] t[0][1] ...t[0][9] |
t[1][0] t[1][1] ...t[1][9] | |
... | |
t[4][0] ...t[4][9] THE END !!! | |
... | |
int i,j; | |
for (i=0;i<5;i++) { | |
for (j=0;j<10;j++) | |
printf(``%f ``,t[i][j]); | |
printf(``\n''); | |
} |
Chaînes de caractères |
// chaîne caractères de taille 5 |
char ch[] = "toto" ; |
// tableau de caractères |
char ch1[100]; |
// chaîne de caractères de taille 5 |
// dans un tableau de caractères de taille 10 |
char ch2[10] = "titi" ; |
// d'autres chaînes de caractères |
char ch3[] = "Une jolie chaîne\n" ; |
char ch4[] = "Une avec un \¨ ou un \\." ; |
Manipulation des chaînes de caractères |
<string.h>
Tableaux et pointeurs |
int *pi, t[10], u[]={1,2,3}; |
// t et u sont deux pointeurs sur des entiers |
// t est l'adresse de t[0] |
// u est l'adresse de u[0] |
pi=t; // OK |
t=pi; // Erreur car t est un pointeur CONSTANT |
t=u; // Erreur car t est un pointeur CONSTANT |
-->
t[3] º pi[3] º *(t+3) º *(pi+3) |
Pointeurs et tableaux |
// Définition d'un pointeur sur caractères | |
// initialisé par une chaîne de caractères | |
char *s = "bonjour"; | |
char u[]="salut"; | |
-->
s[3] |
º *(s+3) º *("bonjour"+3) |
º "bonjour"[3] | |
s = u; // OK | |
u = s; // Erreur car u est un | |
// pointeur CONSTANT | |
double X, T[10], *pT1, *pT2; | |
pT1=&T[4]; | |
X=*(pT1+1); | // Mise à l'échelle |
pT2=&T[7]; | |
i=pT2 - pT1; //i vaut 3 | |
// Par contre, pT1 + pT2 | |
// est interdit |
Tableau en argument d'une fonction |
int sort (int base[], int taille) ; |
int sort (int *base, int taille) ; |
Retour d'une fonction et tableaux |
Énumérations |
enum feux {vert, orange, rouge}; |
feux f1, f2; |
f1=vert; |
switch | (f1) { |
case vert : passer(); break; | |
case orange : accelerer(); break; | |
case rouge : freiner(); break; | |
} |
Structures |
struct personne { |
char Nom[20]; |
short Age; |
}; |
personne p1, p2; |
// en C struct personne p1; |
personne p3={"Jean",36}; |
short i; |
i = p3.Age; |
p2.Age=3; |
Unions |
union realint { |
double Rea; |
int Int; |
} x; |
... |
realint x; |
x.Rea=3.14; |
x.Int=30; |
Problème : se souvenir du champ qui est utilisé !!! |
Exemple d'unions |
enum _utype {INT,FLOAT,STRING}; |
struct{ |
char *name; // nom du symbole |
int flags; // indicateur |
_utype utype; // type du symbole |
union { // valeur du symbole |
int ival; float fval; char *sval; |
} u; |
} symtab[NSYM]; // table de symboles |
... |
switch (symtab[i].utype) { // selon le type |
case INT : |
symtab[i].u.ival=2; break; |
case FLOAT : |
symtab[i].u.fval=2.3; break; |
... |
default : |
printf("Erreur, type inexistant\n"); |
} |
Structures, unions et pointeurs |
struct noeud { |
int Valeur; |
noeud *FilsGauche; |
noeud *FilsDroit; |
} |
noeud arbre1,arbre2,arbre3; |
... |
arbre1.FilsDroit = &arbre2; |
arbre1.FilsDroit->FilsGauche = &arbre3; |
... |
Structures, unions et fonctions |
Structures, unions et tableaux |
char c; |
// Définition d'un tableau de 10000 entités |
// de type structure de personnes. |
personne grosfichier[10000]; |
c=grosfichier[3031].Nom[0]; |
Définition de nouveaux types (1) |
Définition de nouveaux types (2) |
struct personne { |
int age; |
int taille; |
chaine nom; |
personne * suivant; |
// struct personne * suivant; // en C |
}; |