Ceci est un tableau :
char tab[10];
Ceci est un pointeur :
char *tab;
Dans le premier cas, tu réserves l'espace occupé par 10 caractères exactement en mémoire. Tu ne déclares pas de pointeur associé mais le compilateur sait où se trouve ton tableau. Invoquer son nom te permet donc d'en obtenir l'adresse et donc de l'indexer pour pouvoir, à terme, déposer des choses dedans. Par défaut, le
contenu de ce tableau est indéfini et donc complètement aléatoire. Mais ce n'est pas un problème car tu vas immédiatement écrire dedans ;
Dans le second cas, tu déclares un pointeur, c'est-à-dire une variable à même de contenir une adresse mémoire, et dans ce cas précis, l'adresse en mémoire d'un caractère. Par défaut, cette variable est elle-aussi indéfinie, et ne pointe sur rien du tout. Elle sera à même de pointer un tableau de caractères dès lors que tu l'auras réservé, mais elle ne va en aucun cas l'allouer pour toi.
Oui et justement : tu as regardé ton constructeur ?
1 2 3 4
| tableau::tableau(int N)
{
Nmax=N;
} |
Tu enregistres dans Nmax la taille demandée du tableau, mais où est-ce que tu alloues la mémoire nécessaire dans les faits ?
Partager