Un tableau est bien manipulé par C comme un
pointeur. Mais, en fait le compilateur remplace le nom du tableau dans
un programme
par son adresse, il y a donc des différences entre la
déclaration
d'un tableau (ex: int tab[10];) et la déclaration d'un pointeur
(ex:
int* ptab;):
int tab[10];
réserve 10*2 octets pour le tableau tab et c'est
tout.
int* ptab;
réserve 4 octets pour le pointeur
ptab et c'est tout.
Donc tab est VRAIMENT UN TABLEAU
et une adresse (tab est égal à &tab) mais PAS VRAIMENT UN POINTEUR
puisque il n'y a pas eu 4 octets réservés pour un
pointeur.
Et ptab est VRAIMENT UN POINTEUR
mais PAS VRAIMENT UN TABLEAU puisque
aucune place n'a été reservée pour des
éventuels éléments.
pj = tab;
pj pointe vers le début du tableau tab donc pj
peut être utilisé au même titre que tab MAIS tab
n'est TOUJOURS PAS UN VRAI POINTEUR donc:
pj = pj+1;
est autorisé, pj pointe vers
l'élément suivant du tableau.
tab +1;
est autorisé tab+1 pointe vers
l'élément suivant du tableau.
tab = tab+1;
est NON autorisé car tab n'est pas un VRAI
POINTEUR: on ne peut pas modifier tab
#include<stdio.h>
int main(void)
{
/*
Début du programme */ int tab
[3] = {30,40,60};
int* pj;
pj = tab; /* le
& est inutile car tab est une adresse */
pj = pj +1;
}