C_facile : Introduction au langage C
Cours

Cas des tableaux unidimensionnels

Exemple

Puisque dans la déclaration :

int t[10];

« t » est l'identificateur d'un pointeur constant, nous pouvons introduire une autre manière d'accéder à une case du tableau en utilisant l'arithmétique sur les pointeurs.

En effet, les instructions suivantes sont strictement identiques :

t[i] = 0;

*(t+i) = 0;

De la même façon : &t[i] et (t+i) fournissent la même valeur. C'est l'adresse du premier octet de la case d'indice i du tableau t.

En fait, quand nous écrivons :

t[i] = 0;

Le compilateur génère des instructions machine que l'on peut écrire comme :

*(t+ i*sizeof(int))= 0;

ce qui permet de remplir la case i à partir de son premier octet avec la valeur 0.

Les 4 octets consécutifs que l'on trouve à partir de l'adresse t+ i*sizeof(int)) sont donc initialisés.

C'est donc un décalage de i entiers à partir de l'adresse du début du tableau. Ceci est transparent pour le programmeur.

float t[3] = {1.0, 2.0 ,3.0};

/* t est l'identificateur d'un pointeur constant, dont la valeur est l'adresse du premier octet du tableau */

float * pt_sur_flottant;

/* « pt_sur_flottant » est l'identificateur d'une variable qui contient une adresse vers un flottant */

/* les deux lignes suivantes sont equivalentes */

pointeur_sur_flottant = t; // on peut affecter la valeur d'une constante à une variable

pointeur_sur_flottant = &t[0]; // c'est la même chose que l'instruction ci-dessus

/* car &*(t+0) équivanut à (t+0) donc t */

/* et les deux lignes suivantes sont aussi équivalentes */

*pointeur_sur_flottant = -273.15;

/* car c'est *t donc *(t+0) donc t[0] */

t[0] = -273.15; // c'est la façon la plus simple de procéder.

Nous avons donc 2 façons de réaliser l'accès à des cases d'un tableau "bidule" :

bidule[i] et *(bidule +i)

Mais la notation bidule[i] est beaucoup plus facile à comprendre, à lire et à écrire.

C'est donc celle qu'il faut privilégier.

Cas des tableaux bi-dimensionnels (page suivante)Introduction (page Précédente)
AccueilImprimer creativecommons : by-nc-ndRéalisé avec SCENARI