« C pointeurs/Pointeurs de structures » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Page blanchie
Ligne 1 :
{{Chapitre
| niveau = 14
| idfaculté = informatique
| numéro = 20
| précédent = [[../Pointeurs d'entiers/]]
}}
 
 
== Introduction ==
 
=== Présentation ===
 
Nous allons voir une utilisation des pointeurs de structures.
 
 
=== Le but ===
 
Nous voulons une fonction qui retourne les coordonnées d'un point, et un code d'erreur qui nous informe si le point est bien dans les intervalles choisis. Pour l'exercice un caractère et un entier ont été ajouté à la structure.
 
 
== Pointeur de structures ==
 
=== Premier exemple sans le code d'erreur ===
 
 
* L'initialisation du point se fait par des constantes, cela pourrait être des fonctions.
 
 
<source lang="c">
/* ------------------------------------ */
/* Save as : c01.c */
/* ------------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------------ */
typedef struct
{
double x;
double y;
char c;
int i;
 
}point2d, *Ppoint2d;
/* ------------------------------------ */
point2d i_value(void)
{
point2d p={9.,9.,'a',1};
 
return(p);
}
/* ------------------------------------ */
int main(void)
{
point2d p = i_value();
 
printf("p(%.1f,%.1f); c = %c; i = %d;",
p.x,p.y,p.c,p.i);
 
printf("\n\n Press return to continue");
getchar();
 
return 0;
}
</source>
 
 
* La fonction retourne le point.
* Dans le deuxième exemples la fonction retournera l'erreur et nous utiliserons un pointeur de structure pour retourner les valeurs de la structure.
 
 
=== Deuxième exemple avec le code d'erreur ===
 
 
<source lang="c">
/* ------------------------------------ */
/* Save as : c02.c */
/* ------------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------------ */
typedef struct
{
double x;
double y;
char c;
int i;
 
}point2d, *Ppoint2d;
/* ------------------------------------ */
int i_value(
point2d *p /* ou bien : Ppoint2d p */
)
{
int error = 0;
 
(*p).x = 9.;
(*p).y = 9.;
(*p).c = 'a';
(*p).i = 1;
 
if(fabs((*p).x)<10 && fabs((*p).y)<10)
 
error = 1;
 
return(error);
}
/* ------------------------------------ */
int main(void)
{
point2d p;
 
/* &p : l'adresse de p */
 
if(i_value( &p )) printf("p(%.1f,%.1f); c = %c; i = %d;",
p.x,p.y,p.c,p.i);
else printf("error");
 
printf("\n\n Press return to continue");
getchar();
 
return 0;
}
</source>
 
* Essayer :
** point2d p={ -9, +9};
** point2d p={-10, +9};
** point2d p={ -9,+10};
** point2d p={-11,+11};
 
 
{{Bas de page
| idfaculté = informatique
| précédent = [[../Pointeurs d'entiers/]]
}}