Documente Academic
Documente Profesional
Documente Cultură
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
R. Stutzman, M. Torregrossa
3
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
R. Stutzman, M. Torregrossa
4
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 :
Si p est une variable de type pointeur, les
expressions p et *p sont des "lvalue" .
Les variables p et *p peuvent tre places
gauche de l'oprateur d'affectation.
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
R. Stutzman, M. Torregrossa
10
Les oprateurs + et -
Les oprateurs + ou - , avec comme
oprandes un pointeur et un entier, ne sont
pas les oprateurs + ou - ordinaires.
Les oprateurs + ou - dpendent du type de
l'objet point.
D'aprs la dfinition prc., 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]
Il y a une correspondance trs troite entre la notation
indice et l'arithmtique des pointeurs.
IUT R. Schuman Strasbourg
R. Stutzman, M. Torregrossa
13
Les oprateurs + et -
Dfinition :
Le nom d'un tableau est une constante de
type pointeur de type gal au type des
lments du tableau.
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 :
t+i <=> &t[i]
*(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
R. Stutzman, M. Torregrossa
16
Remarque 2
Considrons les dfinitions
char *pa , a[30] ;
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.