Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAxelle Maitre Modifié depuis plus de 9 années
1
et quelques rappels sur certains éléments du langage C
Les pointeurs et quelques rappels sur certains éléments du langage C
5
Définition des pointeurs
Initialisation des pointeurs type *identificateur; . . . int *pi; float *pf; double *pd; Type des données int a, *pi; pi = &a; pi = NULL; NULL - dans stdio.h
6
Pointeurs Adressage direct: Accès au contenu d'une variable par le nom de la variable. Adressage indirect: Accès au contenu d'une variable, en passant par un pointeur qui contient l'adresse de la variable. accès indirect int x,y,*px,*py; x=10; px=&x; py=px; y=*py; //y=x; accès direct x x x x x ? 10 ? 10 ? 10 y y y 10 10 10 10 10 px px py
7
Pointeurs - arthmetique
ptr+const=ptr +const*sizeof(type) ptr-const=ptr - const*sizeof(type) int x, *p; p=&x; p++; p += 4; x=*--p; . . . *p++; *++p; ++*p (*p)++ *(p+1)
8
Pointeurs - exemples int *pt2; float *pt1; pt1=(float *)pt2; . . .
void *pt2; pt1=pt2; int *p, *q; if(p==NULL) . . . if(p<q) . . .
12
#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; } 1,1 2 1
13
#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
14
#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
15
#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
16
#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
17
Les opérations élémentaires sur pointeurs
#include <stdio.h> main() { int A = 1; int B = 2; int C = 3; int *P1, *P2; P1=&A; P2=&C; *P1=(*P2)++; printf("%d,%d\n",*P1,*P2); P1=P2; P2=&B; *P1-=*P2; ++*P2; *P1*=*P2; A=++*P2**P1; P1=&A; *P2=*P1/=*P2; return 0; } 3,4 2,2 6,6 17
20
Utilisation des pointeurs
Fonctions à plusieurs arguments de sortie Calcul d’adresse Allocation dynamique de la mémoire 20
21
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é.
22
Exemple: Le prototype de la fonction #include <stdio.h> 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); } Le nombre d'elements positives=3 Le nombre d'elements negatives=2 La somme d'elements=-8
23
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
24
Utilisation des pointeurs
Calcul d’adresse - Exemple: Soit P un pointeur qui 'pointe' sur un tableau A: int A[] = {12, 23, 34, 45, 56, 67, 78, 89, 90}; int *P; P = A; Quelles valeurs ou adresses fournissent ces expressions: a) *P+2 => la valeur 14 b) *(P+2) => la valeur 34 c) &P+1 => l'adresse du pointeur derrière le pointeur P(rarement utilisée) d) &A[4]-3 => l'adresse de la composante A[1] e) A+3 => l'adresse de la composante A[3] f) &A[7]-P => la valeur (indice) 7 g) P+(*P-10)=> l'adresse de la composante A[2] h) *(P+*(P+8)-A[7]) => la valeur 23 24
26
chaîne est une valeur variable
31
#include <stdio.h> void main()
{char *tab[]={"Eleve","Prof","Stage"}; printf("%s,%s\n",tab[0],*tab); printf("%s,%s\n",tab[1],*(tab+1)); printf("%c,%c\n",**tab,*tab[0]); printf("%c,%c\n",*tab[1],*(tab[1]+1)); printf("%c",*(tab[2]+1)); } Eleve,Eleve Prof,Prof E,E P,r t
32
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> /3 #include <string.h> int count(char *s,char ch); void miroir(char *s,char *t); Les prototypes des fonctions
33
Entrer des données Appel des fonctions void main() 2/3
{ char s[60],m[60],c; printf("Entrer une chaine:"); gets(s); //fgets(s,60,stdin); 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 des données Appel des fonctions Entrer une chaine:abcdcc Entrer un caractere:c Le nombre de caractere c dans abcdcc est=3 La chaine miroire est: ccdcba
34
La définition de la fonction de comptage
int count(char *s,char ch) /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
35
Utilisation des pointeurs
Allocation dynamique de la mémoire int *a; a … 1 élément 2 éléments n éléments
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.