Upload
ambroise-hoarau
View
107
Download
2
Embed Size (px)
Citation preview
1
Les pointeurs et quelques rappels sur certains éléments du
langage C
2
3
4
5
6
7
8
#include <stdio.h>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,121
9
#include<stdio.h>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 <stdio.h>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 <stdio.h>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 <stdio.h>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 <stdio.h>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:0000ad=0000:0002ad=0000:0016ad=0000:FFE4n=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 <stdio.h> 1/2void 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=3Le nombre d'elements negatives=2La 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
29chaîne est une valeur variable
30
31
32
33
34
Exemple: Faire un programme C à trouver: 1) le nombre d’occurrence d’un caractère donné dans une chaîne de caractère donné; 2) la chaîne miroir de la chaîne donné.
#include <stdio.h> 1/3#include <string.h>
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:abcdccEntrer un caractere:cLe nombre de caractere c dans abcdcc est=3La 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