Aller au contenu

Introduction au langage C/Pointeurs de structures

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Pointeurs de structures
Icône de la faculté
Chapitre no 23
Leçon : Introduction au langage C
Chap. préc. :Pointeurs d'entiers
Chap. suiv. :Fonctions de base
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Introduction au langage C : Pointeurs de structures
Introduction au langage C/Pointeurs de structures
 », n'a pu être restituée correctement ci-dessus.


Nous allons voir une utilisation des pointeurs de structures.


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

[modifier | modifier le wikicode]

Premier exemple sans le code d'erreur

[modifier | modifier le wikicode]
  • L'initialisation du point se fait par des constantes, cela pourrait être des fonctions.


/* ------------------------------------ */
/*  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;
}


  • 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

[modifier | modifier le wikicode]
/* ------------------------------------ */
/*  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;
}
  • Essayer :
    • point2d p={ -9, +9};
    • point2d p={-10, +9};
    • point2d p={ -9,+10};
    • point2d p={-11,+11};