1 Les pointeurs et quelques rappels sur certains éléments du langage C
2
3
4
5
6
7
8 #include void main() { int i1=1,i2=2; int *p1,*p2; p1=&i1; p2=p1; printf("%d,%d\n",*p1,*p2); /*affiche ?*/ p2=&i2; printf("%d\n",*p2); /*affiche ?*/ *p2=*p1; printf("%d\n",*p2); /*affiche ?*/ } 1,1 2 1
9 #include int main() { int i; int *j; i = 1; j = &i; *j = 2; printf("i vaut : %d\n", i); return 0; } i vaut : 2
10 #include int main() { int i=11; int *ptri; ptri = &i; printf("La valeur %d est pointee par %p\n,i, ptri); return(0); } La valeur 11 est pointee par 2427:21FE
11 #include int main() { int i; int *ptri; ptri = &i; printf("La valeur pointée par ptri est %d\n", *ptrI); return(0); } La valeur pointee par ptri est 19125
12 #include int main() { int i; int *ptri; ptri = &i; i = 15; printf("La valeur pointée par ptri est %d\n", *ptri); return(0); } La valeur pointee par ptri est 15
13 #include void main() {int *ad1, *ad2, *ad; int n = 10, p = 20; ad1 = &n; ad2 = &p; ad = NULL; printf("ad=%p\n",ad); *ad1 = *ad2 + 2; /*identique a n=p+2; */ (*ad1)++; /* identique a n++;*/ ad++; printf("ad=%p\n",ad); ad += 10; printf("ad=%p\n",ad); ad -= 25; printf("ad=%p\n",ad); n= ad1-ad2; printf("n=%d\n",n); } ad=0000:0000 ad=0000:0002 ad=0000:0016 ad=0000:FFE4 n=1 accès direct accès indirect
14
15
16
17
18
19
20
21
22
23
24
25 Exemple: Faire un programme C à calculer les trois résultats: 1) le nombre d éléments positives; 2) le nombre d éléments négatives; 3) la somme de tout les nombres dans un tableau donné.
26 #include 1/2 void fon(int a[ ],int n,int *n_pos,int *n_neg,int *s); void main() { int tab[ ]={22,-33,4,5,-6}; int n_pos,n_neg,somme; fon(tab,sizeof(tab)/sizeof(int),&n_pos,&n_neg,&somme); printf("Le nombre d'elements positives=%d\n",n_pos); printf("Le nombre d'elements negatives=%d\n",n_neg); printf("La somme d'elements=%d\n",somme); } Exemple: Le nombre d'elements positives=3 Le nombre d'elements negatives=2 La somme d'elements=-8 Le prototype de la fonction
27 void fon(int a[],int n,int *n_pos,int *n_neg,int *s) 2/2 { int i; *n_pos=*n_neg=*s=0; for(i=0;i<n;i++) { if(a[i]>0) (*n_pos)++; else if(a[i]<0) (*n_neg)++; (*s)+=a[i]; } } La définition de la fonction
28
29 chaîne est une valeur variable
30
31
32
33
34 Exemple: Faire un programme C à trouver: 1) le nombre doccurrence dun caractère donné dans une chaîne de caractère donné; 2) la chaîne miroir de la chaîne donné. #include 1/3 #include int count(char *s,char ch); void miroir(char *s,char *t); Les prototypes des fonctions
35 void main() 2/3 { char s[60],m[60],c; printf("Entrer une chaine:"); gets(s); printf("Entrer un caractere:"); fflush(stdin); c=getchar(); printf("Le nombre de caractere %c dans %s est=%d\n",c,s,count(s,c)); miroir(s,m); printf("La chaine miroir est: %s\n",m); } Entrer une chaine:abcdcc Entrer un caractere:c Le nombre de caractere c dans abcdcc est=3 La chaine miroire est: ccdcba Entrer des données Appel des fonctions
36 int count(char *s,char ch) 3/3 { int c=0; while(*s!='\0') if(*s++ ==ch)c++; return c; } void miroir(char *s,char *t) { int l=strlen(s); s+=l-1; while(l) {*t++=*s--; l- -; } *t='\0'; } La définition de la fonction de comptage La définition de la fonction de miroir
37