Documente Academic
Documente Profesional
Documente Cultură
Gnralits
En langage C, une chane de caractres est
toujours stocke dans un tableau de char et
sera dsigne par le nom du tableau.
Gnralits
Exemple :
char str[10] ;
Le tableau de caractres str permet de stocker des chanes
de longueur <= 9 , par exemple la chane bonjour
b | o | n | j | o | u | r | \0 | |
str[0] str[9]
ATTENTION
Mis part lors de la dfinition d'un tableau de char o
l'on peut crire :
char str [10] = "BONJOUR" ;
on ne peut pas affecter directement une constante de
type chane de caractres un tableau de char.
Exemple :
char str [10];
...
str = "IUT"; // FAUX !!!
En effet, la constante chane de caractres "IUT"
correspond un tableau de 4 char non explicite, et
l'affectation directe de 2 tableaux est impossible.
IUT R. Schuman Strasbourg
4 R. Stutzman, M. Torregrossa
ATTENTION
Les chanes de caractres seront manipules par
l'intermdiaire de fonctions qui font partie de la
bibliothque standard des fonctions du C.
Ces fonctions et procdures sont
z strlen pour connaitre la longueur d'une chane
z strcpy pour copier une chane dans un tableau de char
z strcmp pour comparer deux chanes de caractres
z strcat pour concatner une chane la fin d'une autre chane
strlen
strlen retourne le nombre de caractres de la
chane s (caractre nul de fin de chane non
compris).
strcpy
strcpy copie la chane de caractres stocke
dans le tableau t dans le tableau s
strcat
strcat copie la chane stocke dans le tableau t
la fin de la chane stocke dans le tableau s
strcmp
strcmp
int strcmp ( const char s[ ], const char t[ ] ) {
int i ,suite ;
suite = 1 ;
i=0;
while ( suite && (s[ i ] == t[ i ]) ) {
if( s[ i ] == '\0 )
suite = 0 ;
else
i++ ;
}
return s[ i ] - t[ i ] ;
}
if ( strcmp(a , b) )
printf("\"%s\" est different de \"%s\"\n", a , b) ;
else
printf("\"%s\" est egale a \"%s\"\n", a , b) ;
}
IUT R. Schuman Strasbourg
11 R. Stutzman, M. Torregrossa
LES POINTEURS
Gnralits
Une variable de type pointeur est une variable dont la
valeur est l'adresse d'un objet.
Dfinition de variable de type pointeur :
<nom_de_type> *<nom_de_variable> ;
Exemple :
char *pc ; // pc est une variable de type pointeur de char
int *pi ; // pi est une variable de type pointeur de int
short *ps ; // ps est une variable de type pointeur de short
Syntaxe:
*<expression_de_type_pointeur>
La valeur de cette expression est le contenu de
la zone mmoire adresse par l'<expression de
type pointeur>.
IUT R. Schuman Strasbourg
14 R. Stutzman, M. Torregrossa
Exemple :
int x = 5 , y , *pi ;
pi = &x ; //pi aura pour valeur l'adresse de la variable x
x 5
pi
IUT R. Schuman Strasbourg
15 R. Stutzman, M. Torregrossa
Oprateur contenu *
Exemples :
int x = 5 , y , *pi ;
pi = &x ; /*pi aura pour valeur l'adresse de la var. x */
y = *pi + 1 ; /* la variable y aura pour valeur 6 */
*pi = 4 ; /* la variable x aura pour valeur 4 */
*pi = *pi +1; /* la variable x aura pour valeur 5 */
(*pi)++; /* la variable x aura pour valeur 6 */
Oprateur contenu *
Remarques :
Pointeurs et fonctions
Pointeurs et fonctions
Exemple :
main( ) {
int a = 3 , b = 5 ; // 3 b a 5
swap (a , b) ; // appel par valeur
}
Pointeurs et fonctions
Pointeurs et fonctions
Exemple :
main() {
int a = 3 , b = 5 ; // a 3 b 5
swap (&a , &b) ;
}
void swap (int *px , int *py) {
int z ; // px &a py &b
z = *px ;
*px = *py ;
*py = z ;
}
IUT R. Schuman Strasbourg
21 R. Stutzman, M. Torregrossa
Les oprateurs + et -
Les oprateurs + ou - , avec comme
oprandes un pointeur et un entier, ne sont
pas les oprateurs + ou - ordinaires.
Ils dpendent du type de l'objet point. D'aprs
la dfinition prcdente, si pa = &a[i] ; alors
z *pa dsigne le contenu de a[i]
z *(pa+1) dsigne le contenu de a[i+1]
z *(pa+k) dsigne le contenu de a[i+k]
Les oprateurs + et -
Dfinition :
Les oprateurs + et -
Exemple :
int t[20] ; // t est une constante de type pointeur de int
// gale l'adresse de t[0].
Par consquent :
z l'expression t a pour valeur l'adresse de l'lment t[0]
z l'expression t+1 a pour valeur l'adresse de l'lment t[1]
z l'expression t+i a pour valeur l'adresse de l'lment t[i]
donc :
zt +i <=> &t[i]
z *(t + i) <=> t[i]
Remarque 1
La mme quivalence est valable pour les
variables de type pointeur.
Exemple :
Soit :
char a[20] , *pa ;
pa = a ;
alors :
*(pa+i) <=> pa[i]
IUT R. Schuman Strasbourg
27 R. Stutzman, M. Torregrossa
Remarque 2
Considrons les dfinitions
Remarque 3
Quand un nom de tableau est fourni comme
paramtre d'appel une fonction, c'est la
valeur de ce nom (c'est dire l'adresse du 1er
lment du tableau) qui est transmise et
stocke dans la zone correspondant au
paramtre formel (qui doit tre de type
pointeur).
main() {
char a[12] ; a I | U | T | \0 | .. |
int n ;
printf ("introduire la chaine : ") ;
scanf ("%s", a) ;
n = strlen(a) ;
printf ("longueur de la chaine : %d\n" , n) ;
}
ou encore:
Exemple 1 :
Exemple 2 :
Soit :
char s[20] , *t ;
z l'instruction t = "abcd" ; est correcte
z l'instruction s = "abcd" ; est fausse
z l'instruction strcpy ( s , "abcd" ) ; est correcte
z l'instruction strcpy ( t , "abcd" ) ; est correcte
condition que la valeur de la variable t soit
gale l'adresse d'un tableau d'au moins 5 char.
Remarque
Le seul cas o une constante chane de caractres
n'est pas considre par le compilateur comme
un pointeur constant de type char est celui de
l'initialisation d'un tableau de char lors de sa
dfinition.