Une chaîne de caractères est (en C) un
tableau de caractères. Donc on a aussi des "vraies"
chaînes et des pointeurs de caractères
char s[10] = "bonjour";
réserve 10 octets pour la
chaîne s et l'initialise à "bonjour".
char* ps;
réserve 4 octets pour le pointeur.
Donc s est VRAIMENT
UNE CHAINE et une adresse (s est égal à
&s) mais PAS VRAIMENT UN POINTEUR
puisque il n'y a pas eu 4 octets réservés pour stocker un
pointeur.
Et ps est VRAIMENT UN POINTEUR
DE CARACTERE mais PAS VRAIMENT UNE CHAINE puisque aucune place
n'a été reservé pour des éventuels
éléments.
ps = s;
ps pointe vers le début de la chaîne s
donc ps peut être utilisé au même titre que s MAIS s
n'est TOUJOURS PAS UN VRAI POINTEUR donc:
ps = ps+1;
est autorisé, ps pointe vers le
caractère suivant de la chaîne.
s + 1;
est autorisé s+1
pointe vers le caractère suivant de la chaîne.
s = s+1;
est NON autorisé car s
n'est pas un VRAI POINTEUR: on ne peut pas modifier s
#include<stdio.h>
int main(void)
{
/*
Début du programme */ char s
[4] = "IUT";
char* ps;
ps = s;
/* le & est inutile
car s est une adresse */
ps = ps +1;
}