Académique Documents
Professionnel Documents
Culture Documents
Données
Wurtz Jean-Marie
1
Les pointeurs en C : Les pointeurs en C :
passage par adresse (1) passage par adresse (2)
void echange(int a, int b) void echange(int *a, int* b)
{ {
• passage par valeur , int f1(int a, int b) : la int tmp; int tmp;
fonction f1 crée une copie des variables « a » et tmp = a; tmp = *a;
«b» a = b; *a = *b;
b = tmp; *b = tmp;
} }
• passage par adresse, int f2(int *a, int *b) : la a =11; a =11;
fonction f2 peut modifier le contenu des b = 27; b = 27;
a et b inchangées a et b échangées
• int ti[];
•int f3(int a[], int b), « a » passage par adresse : les
modifications du tableau « a » seront répercutées au • double td[];
niveau de la fonction appelante. • char tc[];
• struct nœud tn [];
•Une variable définit comme un tableau est transmise struct nœud {
comme un pointeur : a[n] == *(a+n)
int i;
enum/sizeof
struct nœud *s;
} t[i] = *(t+i)
TD/sizeof.c
2
Les pointeurs en C : Les pointeurs en C :
retour de fonction les fonctions
• Une fonction peut retourner : • int uneFonction(), (*pf)() :
– des types simples : char, short, int, unsigned, long, -adresse de la fonction:
double
– ou un pointeur vers un tel type
pf = uneFonction
-exécuter la fonction : (*pf)()
• Une fonction ne peut retourner que des pointeurs de
fonction, struct ou union • Un pointeur de fonction :
-n’est pas une variable
• Pas de valeur retournée :
– void uneFonction()
-peut-être assigné à un tableau
3
Les pointeurs en C : Les pointeurs en C :
allocation dynamique (2) conversion de pointeurs
• Conversion de type :
• void free(p) : libère l’espace alloué – pType = (Type *)malloc(n*sizeof(Type))
TD/TD1-tableau1.c
int main() {
#define BLOC 2 char t[20];
#include <stdio.h>
Variables globales : strcpy(t, "Marie"); inserer(t);
#include <stdlib.h>
int taille=0, compteur=0; strcpy(t, "Robert"); inserer(t);
#include <string.h> strcpy(t, "Anne"); inserer(t);
char *tableau[];
inserer("Albert");
Fonctions :
int inserer(char *s) inserer("Yann");
int inserer(char *s) inserer("Rose");
-taille du tableau suffisant ? :
void afficher() inserer("Myriam");
malloc, realloc affiche();
int supprimer(char *s)
-insérer la chaîne s : }
free()
malloc
http://www-bio3d-igbmc.u-strasbg.fr/~wurtz pointeur/tableau1-char-malloc.c
4
Créer une structure de données Décrire des formes géométriques
décrivant un point
• Un cercle : son centre et le rayon
• un point a 2 composantes : • un carré : son centre et le coté
x et y Utilisation de typedef
• Description en C? • un rectangle : son centre et la hauteur et la largeur
typedef struct Point { • un polygone : un nombre quelconque de points ( > 3) avec
• struct Point { double x, y; comme centre le centre de masse des points
double x, y;
} } TPoint; • Décrire les structures de données et les fonctions
• Définition d'une variable Point d'initialisation :
TPoint pnt = {1.5,3.0}; struct Cercle { //une variable cercle
struct Point pnt = {1.5,3.0}; struct Point c; // le centre //et un pointeur de cercle
struct Point p1, *p2; TPoint p1, *p2; double r; // le rayon Struct Cercle ce, *pce;
// accès aux champs x et y de pnt }
p1 = pnt; // tester cette assignation struct Cercle * créerCercle(struct Point *c, double r)
p2 = &pnt; // comment accéder les
//champs x et y de p2