Académique Documents
Professionnel Documents
Culture Documents
Par Nom?
en
101 102
1
Les Pointeurs Les Pointeurs
Définition Exemple
Un pointeur est une variable spéciale qui contient Un pointeur est une variable particulière, dont la valeur est
l’adresse d’une autre variable. l'adresse d'une autre variable dans la mémoire.
Exemple :
A est une variable qui contient la valeur 10.
P est un pointeur qui contient l'adresse de A
(P pointe sur A).
Remarques :
Le nom d’une variable permet d'accéder directement à sa
valeur (adressage direct).
Un pointeur qui contient l'adresse de la variable, permet
d'accéder indirectement à sa valeur (adressage indirect).
Le nom d'une variable est lié à la même adresse, alors qu’un
pointeur peut pointer sur différentes adresses.
103 104
2
Les Pointeurs Les Pointeurs
3
Les Pointeurs Les Pointeurs
Exemple : Exemples :
int * p; //on déclare un pointeur vers une variable de type int
int *pi; //pi est un pointeur vers une variable de type int. int i=10, j=30; // deux variables de type int
float *pf; //pf est un pointeur vers une variable de type float. p=&i; // on met dans p, l’adresse de i (p pointe sur i)
printf("*p = %d \n",*p); //affiche : *p = 10
Remarque : *p=20; // met 20 dans la case pointée par p (i vaut 20 après l’instruction)
La valeur d’un pointeur donne l’adresse du premier octet p=&j; // p pointe sur j
parmi les n octets où la variable est stockée. i=*p; // affecte le contenu de p à i (i vaut 30 après cette instruction)
107 108
4
Les Pointeurs Les Pointeurs
109 110
5
Les Pointeurs Les Pointeurs
Pointeurs et Tableaux
A partir de là, on peut manipuler le tableau T en utilisant P, en Langage C :
effet :
P pointe sur T[0] et *P désigne T[0]
P+1 pointe sur T[1] et *(P+1) désigne T[1]
Les Pointeurs
….
P+i pointe sur T[i] et *(P+i) désigne T[i]
Exemple :
Allocation dynamique
de la mémoire
111 112
6
Les Pointeurs Les Pointeurs
Gaspillage de la mémoire
113 114
7
Les Pointeurs Les Pointeurs
8
Les Pointeurs Les Pointeurs
Allocation dynamique de mémoire: Fonction malloc() Allocation dynamique de mémoire: Fonction malloc()
Syntaxe : malloc(N); //N : nombre d’octets Exemple 2:
La fonction malloc retourne : #include<stdio.h>
#include<stdlib.h>
un pointeur de type char * pointant vers le premier octet. main()
le pointeur NULL s’il n’y a pas assez de mémoire libre à allouer. {
int i = 3;
Qu’affiche ce
int j = 6; programme???
int *p;
Exemple: réserver la mémoire pour un texte de 100 caractères: p = (int*)malloc(2*sizeof(int));
*p = i;
T = malloc(100); *(p+1) = j;
printf("p = %ld \t *p = %d \t p+1 = %ld \t *(P+1) = %d\n“, p,*p,p+1,*(p+1));
Cette instruction fournit l'adresse d'un bloc de 100 octets libres et }
l'affecte à T.
S'il n'y a pas assez de mémoire, T obtient la valeur zéro (NULL).
117 118
9
Les Pointeurs Les Pointeurs
Allocation dynamique de mémoire: Fonction malloc() Allocation dynamique de mémoire: Fonction malloc()
Exemple 2: Exemple 3:
Un programme qui stocke l'âge de tous les amis de l'utilisateur
dans un tableau, puis affiche ces âges.
Le problème est que : on connait pas le nombre d’amis de
l’utilisateur ==> Donc on connait pas la taille à donner au
Qu’affiche ce tableau.
programme???
119 120
10
Les Pointeurs Les Pointeurs
Allocation dynamique de mémoire: Fonction malloc() Allocation dynamique de mémoire: La fonction calloc
Exemple 3:
Un programme qui stocke l'âge de tous les amis de l'utilisateur La fonction calloc fournie dans l’en-tête stdlib.h à le même rôle
dans un tableau, puis affiche l’âge de tous ces amis. que le malloc mais initialise en plus *p à zéro :
calloc(nb-éléments, taille-élément)
121 122
11
Les Pointeurs Allocation dynamique de mémoire: Les Pointeurs
12
Les Pointeurs Les Pointeurs
125 126
13
Les Pointeurs Les Pointeurs
127 128
14
Les Pointeurs Les Pointeurs
15
Les Pointeurs Les Pointeurs
ptr = Tab;
16
Les Pointeurs Les Pointeurs
Exemple:
Exemple:
Dans cet exemple, l’appel de la fonction
ValeurAbsolue provoque :
Le calcul de la valeur absolue de -5.7 et n=3 et
m= 4
son stockage dans y
Mais aussi la modification de la variable
x (paramètre effectif) qui va changer de valeur.
133 134
17
Chapitre 5:
Les chaînes de
Programmation en
langage C caractères
2ère Année du Troc Commun MIPC II
en
Section A
136
18
Les chaînes de caractères Les chaînes de caractères
19
Les chaînes de caractères Les chaînes de caractères
AFFICHAGE
texte = (char*)malloc(10); char texte[10] = ‘’BONJOUR’’;
printf("VOICI LE TEXTE: %s\n",texte);
char NOM[15];
On utilisera aussi la fonction puts non formatée:
Remarques : puts(texte); est équivalent à
1. Pour une chaîne de N caractères, on a besoin de N+1 octets en printf("%s\n",texte);
mémoire (le dernier octet est réservé pour le caractère ‘\0’).
2. Le nom d’une chaîne de caractères est le représentant de
l’adresse du 1er caractère de la chaîne.
3. On peut manipuler les chaînes de caractères en utilisant des
pointeurs.
139 140
20
Les chaînes de caractères Les chaînes de caractères
scanf(" %s ",texte); Exemple : char ch[] = {‘e’, ’c’, ’o’, ’l’, ’e’, ’\0’};
2. par une chaîne constante.
On utilisera aussi la fonction gets non formatée: Exemple : char ch[] = "ecole";
gets(texte); est équivalent à 3. en attribuant l'adresse d'une chaîne de caractères constante
scanf(" %s",texte); à un pointeur de type char.
Exemple : char *ch = "ecole" ;
141 142
21
Les chaînes de caractères Les chaînes de caractères
Fonctions de Traitement des chaînes de caractères Fonctions de Traitement des chaînes de caractères
Fonctions de la bibliothèque <stdio.h>
Le langage C dispose de plusieurs bibliothèques contenant des
fonctions pour le traitement de chaînes de caractères. Fonction Rôle
Les principales bibliothèques de traitement des chaînes de permet d’afficher une chaîne en
caractères sont : printf( )
utilisant le spécificateur de format %s.
La bibliothèque <stdio.h>
affiche la chaîne désignée par Chaîne
puts(chaine)
La bibliothèque <string.h> et provoque un retour à la ligne.
permet de saisir une chaîne de
La bibliothèque <stdlib.h>
scanf( ) caractères en utilisant le spécificateur
de format %s
lit la chaîne de caractères désignée par
gets( chaine) Chaîne.
143 144
22
Les chaînes de caractères Les chaînes de caractères
Fonctions de Traitement des chaînes de caractères Fonctions de Traitement des chaînes de caractères
Fonctions de la bibliothèque <stdio.h> Fonctions de la bibliothèque <string.h>
Fonction Rôle
Fonction Exemple
fournit la longueur de la chaîne sans compter
char ch[ ]= " Bonsoir " ; strlen(<s>)
printf( ) le '\0‘ final
printf(" %s ", ch);
strcpy(<s>, <t>) copie <t> vers <s>
char *ch= " Bonsoir " ;
puts(chaine)
puts(ch);
strcat(<s>, <t>) ajoute <t> à la fin de <s>
char Nom[15];
scanf( ) printf("entrez votre nom"); renvoie un nombre:
scanf(" %s ", Nom); - positif si la chaîne1 est supérieure à la
chaine2 (au sens de l'ordre alphabétique)
char phrase[100]; strcmp(<s>, <t>)
- négatif si la chaîne1 est inférieure à la
gets( chaine) printf("entrez une phrase"); chaîne2
gets(phrase); - nul si les chaînes sont identiques.
strncpy(<s>, <t>, <n>) copie au plus <n> caractères de <t> vers <s>
145 ajoute au plus <n> caractères de <t> à la fin146
strncat(<s>, <t>, <n>)
de <s>
23
Les chaînes de caractères Les chaînes de caractères
Fonctions de Traitement des chaînes de caractères /*************** Exemple d’affichage d’une chaîne***************/
#include <stdio.h>
Fonctions de la bibliothèque <string.h> int main()
{
Fonction Exemple char texte[100];
printf(" saisir un texte (Max 100 lettres):\n");
char ch[ ]= " Test"; scanf("%s", texte);
strlen(ch) printf(“%d”,strlen(ch)); //4 printf(" Le texte saisi est: %s",texte);
}
/*************** Longueur d’une chaîne***************/
char ch1[20]=" Bonne", ch2=" chance "; #include <stdio.h>
strcat(ch1, ch2) ; #include <string.h>
strcat(ch1, ch2) int main()
printf(" %s", ch1); // Bonne chance {
char texte[100];
int longueur;
retourne une valeur : nul si ch1 et ch2 sont
printf(" saisir un texte (Max 100 lettres):\n");
strcmp(ch1, ch2) identiques, négative si ch1 précède ch2, scanf("%s", texte);
positive si ch1 suit ch2. longueur=strlen(texte);
printf(" Le texte saisi est; %s",texte);
char ch[10]; printf(" Le texte saisi est de longueur %d",longueur);
strcpy(ch1, ch2) strcpy(ch, " Bonjour "); }
puts(ch); // affiche Bonjour
147 148
24
Les chaînes de caractères Les chaînes de caractères
if( strcmp(CH1,CH2) == 0 )
printf(" Les 2 chaînes sont égaux.\n"); printf( " Résultat de concatenation: %s\n",a);
else
printf(" Les 2 chaînes sont différentes.\n"); return 0;
}
return 0;
}
149 150
25
Les chaînes de caractères Les chaînes de caractères
atol(<s>) retourne la valeur numérique représentée par <s> comme long #include <stdlib.h>
#include <stdio.h>
atof(<s>) retourne la valeur numérique représentée par <s> comme double
int main(void)
{
Nombre Chaîne int i;
char *s;
convertit son premier argument en une chaîne de caractères qui sera
itoa (<n_int>, <s>, <b>)
ensuite attribuée à <s>. La conversion se fait dans la base <b>.
s = "-505";
i = atoi(s);
printf("i = %d\n",i);
151 } 152
26
Les chaînes de caractères Les chaînes de caractères
27
Les chaînes de caractères Les chaînes de caractères
1. Écrire un programme qui lit 5 mots, séparés par des espaces et qui Exercice 1: Ecrire un programme en C qui permet de renverser une chaine
les affiche ensuite dans une ligne, mais dans l'ordre inverse. Les de caractères.
mots sont mémorisés dans 5 variables M1, ... ,M5.
Exemple Exercice 2: Ecrire un programme en C qui permet de saisir un mot et de
Math Info Physique Chimie !
vérifier s’il est un palindrome.
! Chimie Physique Info Math
Exercice 3: Ecrire un programme en C qui permet d’échanger deux chaine
2. Ecrire un programme qui demande l'introduction du nom et du de caractères Chaine1 et Chanie2.
prénom de l'utilisateur et qui affiche alors la longueur totale du
nom sans compter les espaces. Employer la fonction strlen.
Exemple:
Introduisez votre nom et votre
prénom: Ahmed Jalali
Bonjour Ahmed Jalali !
Votre nom est composé de 11 lettres
28
Les chaînes de caractères Les chaînes de caractères
strrev(Chaine); strcpy(copie,mot);
strrev(copie);
printf(" La chaine renversée est \n %s \n", Chaine);
if( strcmp (mot, copie) == 0 )
return 0; printf("Le mot saisi est un palindrome.\n");
} else
printf("Le mot saisi n’est pas un palindrome..\n");
return 0;
157 } 158
29
Les chaînes de caractères
temp = (char*)malloc(100);
159
30