TP n°3 : tableaux et arithmétique des pointeurs

1  Expérimentation

1.1  Tableaux et pointeurs

Dans un programme, déclarez une variable de type tableau et une variable de type pointeur. Utilisez indifféremment l'une et l'autre avec une syntaxe de tableau ou de pointeur. Testez les affectations d'une variable vers l'autre.

Faites aussi des essais avec les chaînes de caractères.

1.2  Arithmétique des pointeurs

Si un entier est ajouté à un pointeur, cela donne un pointeur. Qu'en penser ?

1.3  Conversion de type

La syntaxe (T)y convertit y en une valeur de type T. Cela s'appelle un cast.

Expérimentez avec le cast de pointeurs.

2  Approche formelle

2.1  Arithmétique des pointeurs

Les pointeurs ne sont pas des types numériques. Néanmoins, ils peuvent participer à des opérations numériques.

L'addition d'un entier et d'un pointeur est un pointeur de même type. L'entier est converti en le type size_t avant l'addition.

La soustraction de deux pointeurs est un entier de type ptrdiff_t habituellement défini dans stddef.h.

2.2  Référencement et déréférencement

Une lvalue peut être définie comme ce qui est autorisé à gauche d'un signe =, par exemple un nom de variable.

&p sur une lvalue de type T est un pointeur de type T*.

*p sur un pointeur de type T* est une lvalue de type T.

p[i] est équivalent à *(p+i).

&p[i] se lit &(p[i]) est équivalent à (&p)[i].

2.3  Tableaux

Un tableau est un pointeur alloué sur la pile. Un tableau de type T à n éléments alloue un bloc de taille n*sizeof(T).

Quand on utilises un tableau t autrement que sous la forme &t, c'est équivalent à &t[0].

2.4  Tableaux à plusieurs coordonnées

La syntaxe T x[n][...] déclare x comme tableau à n éléments de type T [...].

Ainsi, x[i][j] est équivalent à x[i*sizeof(x[0])+j].

2.5  Tableaux incomplets

La syntaxe T x[] est presque identique à T *x. Néanmoins, la seconde syntaxe déclare un pointeur, tandis que la première déclare un tableau de taille non spécifiée.

Donnez un exemple où cela cause une différence.


Exemple de bibliographie

3  Application

Modifiez votre calculatrice à pile pour qu'elle fasse des calculs matriciels.