Tableau
Un tableau t de taille n et de type type définit n variables de type type indicées de 0 à n-1 : t[0] ... t[n-1].
int valeurs[10];
int t[] = {1, 2, 3};
Une chaîne de n
caractères est un tableau de n+1 caractères, dont le
dernier caractère est le caractère nul '\0'.
char s[] = "Bonjour";
Pointeur
Un pointeur est une variable dont le contenu est une adresse. Son type
est donné par le type de la variable pointée suivi de *.
Par exemple int *.
L'adresse d'une variable s'obtient à l'aide de
l'opérateur &, le contenu d'une adresse à l'aide de
l'opérateur *.
Par exemple :
int * pi = &i;
*pi = *pi + 1; //augmente la valeur de i
Une variable de type tableau est un pointeur constant.
On peut également adresser les éléments d'un
tableau à l'aide d'un pointeur ayant le même type que les
éléments du tableau.
int t[] = {1, 2, 3}; // t est
constant
int * t2 = {1, 2, 3}; // t2 est variable
char * s2 = "Bonjour";
A noter l'existence des pointeurs de fonction dont l'utilisation
sera vue ultérieurement.
int (* f)(int) = fact;
Arithmétique des pointeurs
L'arithmétique sur les pointeurs tient compte du type de l'objet
pointé. Ainsi, si p est
un pointeur vers une variable de type t, et k un entier, p+k sera égal à p+k*sizeof(t).
Ainsi, *(t +i), si
t est un tableau, est équivalent à t[i]. Voir test_pointeurs.c.
$ test_pointeurs
&c = bffffbd0, sizeof(c) = 1,
pc+1 = bffffbd1
&i = bffffbd8, sizeof(i) = 4,
pi+1 = bffffbdc
&s = bffffbe0, sizeof(struct
ma_struct) = 8, ps + 1 = bffffbe8
Balayage de t
contenu de bffffc00 = 1
contenu de bffffc04 = 2
contenu de bffffc08 = 3
contenu de bffffc0c = 4
Tableau multi-dimensionnel
Il est possible de créer des tableaux à plusieurs
dimensions :
float m[5][10];
Dans ce cas m[i][j] est
équivalent à *(m +
i*10 + j).
Dans le cas général, si
type
t[n1]...[nk];
t[i1]...[ik] sera
équivalent à * (t + i1*n2*
... *nk + i2*n3* ... *nk + ... + ik)