Définition de synonymes
Attention: Syntaxe à prendre avec des pincettes, peut nuire gravement à la lisibilité d'un code
Il est possible de donner des synonymes à des types de variables, imaginons que au lieu de créer un tableau de 2 flottants, vous souhaiteriez modifier cette déclaration ci-dessous
Code:
float A[2];
Code:
point A; /* coordonnées du point A */
Cet exemple concret reste raisonnable et acceptable, attention toujours de rendre le nom de vos synonymes compréhensibles.
Syntaxe
Pour créer un synonyme de type, on utilisera le mot clé typedef...
Pour créer notre point de coordonnées x, y (tableau de 2 flottants), on fera comme ceci
Code:
#include <stdio.h> #include <stdlib.h> typedef float point[2]; /* création du synonyme type float par point */ int main(void) { point A; /* déclaration du point A de coordonnées x, y */ float x = 12.5; /* déclaration des coordonnées à enregistrer */ float y = 8.2; A[0] = x; /* assignation des coordonnées du point A */ A[1] = y; printf("Le point A est de coordonnées x=%f et y=%f\n", A[0], A[1]); /* Affichage des coordonnées */ return 0; }
typedef est utilisé en dehors de la fonction main
Paramètre de fonction
En tant que paramètre de fonction, il n'y a pas de surprise
Code:
#include <stdio.h> #include <stdlib.h> typedef float point[2]; void displayCoordinates(point A); int main(void) { point A; float x = 12.5; float y = 8.2; A[0] = x; A[1] = y; displayCoordinates(A); return 0; } void displayCoordinates(point N) { printf("Le point est de coordonnées x=%f et y=%f\n", N[0], N[1]); }
Ah là on rentre dans la partie où typedef est le plus souvent utilisé, regardez plutôt la clarté sur une structure
Code:
typedef struct { float x; float y; } Point;
Le code modifié sera plus clair au lecteur
Code:
#include <stdio.h> #include <stdlib.h> typedef struct { float x; float y; } Point; void displayCoordinates(Point A); int main(void) { Point A; /* Déclaration d'un point A de coordonnées x, y */ float x = 12.5; float y = 8.2; A.x = x; /* Assignation de la coordonnée x du point A */ A.y = y; /* Assignation de la coordonnée y du point A */ displayCoordinates(A); /* Affichage des coordonnées de A */ return 0; } void displayCoordinates(Point A) { printf("Le point est de coordonnées x=%f et y=%f\n", A.x, A.y); }
Pas le choix, vous l'aurez deviné, il nous faut les pointeurs
Code:
void modify(Point *N, float x, float y) { N->x = x; N->y = y; }
modify est une fonction prenant en paramètres l'adresse d'une structure Point nommée N, et les coordonnées à réassigner x, y.
N->x équivalent à (*N).x permet un petit raccourci, -> est un opérateur permettant l'assignation d'une valeur directement par l'adresse de la variable
Le code fonctionnel est le suivant
Code:
#include <stdio.h> #include <stdlib.h> typedef struct { float x; float y; } Point; void modify(Point *N, float x, float y); void displayCoordinates(Point A); int main(void) { Point A; float x = 12.5; float y = 8.2; modify(&A, x, y); /* en paramètre l'adresse d'une structure, d'où le & */ displayCoordinates(A); return 0; } void modify(Point *N, float x, float y) { N->x = x; N->y = y; } void displayCoordinates(Point A) { printf("Le point est de coordonnées x=%f et y=%f\n", A.x, A.y); }
Évidemment vous faîtes comme vous le souhaitez, je conseille l'utilisation de typedef juste pour la création de vos structures, car son utilisation à toutes les sauces peuvent rendre votre code illisible. Pensez toujours que en tant que professionnel d'autres liront vos codes, et en tant que débutant, en relisant 1 mois plus tard vous risquez de ne plus vous comprendre...
EXERCICES
Créer une structure Personne, comprenant les données suivantes
- nom (25 caractères maximum)
- prenom (25 caractères maximum)
- telephone (exemple 0652984723) (10 caractères maximum)
Créer une fonction creerPersonne, prenant en paramètre nom, prenom et telephone et retournant une structure Personne
Code:
Personne creerPersonne(const char *nom, const char *prenom, char *telephone) { /* code */ }
Code:
void modifierPhone(Personne *pers, const char *phone) { /* code */ }
Code:
void displayPersonne(Personne pers) { /* code */ }
Vérifier ces fonctions avec la fonction displayPersonne et regarder si le téléphone de la personne est bien modifié
Merci de m'avoir lu et à bientôt pour le prochain cours
Commentaire