Paramètres et pointeurs

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée
Advertisements

Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Structure de base des programmes en C.
Premier programme en C :
La boucle for : init7.c et init71.c
Chapitre annexe. Récursivité
Les fonctions A quoi ça sert ?
Rappels C.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
3- Déclaration et accès aux objets
C.
Structures et unions types énumérés Qu'est-ce qu'une structure
Les pointeurs Manipulation d'adresses et de ce qui est contenu dans ces adresses Très important, fondamental même en C mauvaise réputation : 'dur à comprendre',
Tableaux Certains problèmes nécessitent beaucoup de variables du même type. Exemple : relevé de températures matin et soir dans 10 villes pour 10 jours.
Chap. 1 Structures séquentielles : listes linéaires
Fonctions Dans un programme : certaines opérations (ou séquences d'opérations) peuvent se répéter plusieurs fois : affichage de tableau, saisie, ou même.
Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand.
6. Les sous-programmes P. Costamagna – ISEN N1.
8. Les tableaux P. Costamagna – ISEN N1.
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Points importants de la semaine Les fonctions. La portée. La passage par copie. Les tableaux.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Récursivité.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Particularités des calculs
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Algorithmique et langage C. Les traitements Comment utiliser les données.
Structures de données IFT-2000
Procédures et fonctions
FONCTIONS avec paramètres en Entrée/Sortie
Plan cours La notion de pointeur et d’adresse mémoire.
Le langage C Rappel Pointeurs & Allocation de mémoire.
9ième Classe (Mardi, 4 novembre) CSI2572. H Nous avons vu comment utiliser les directives #define #ifndef #endif Pour s’assurer de l’inclusion unique.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Les pointeurs Suite.
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
11/04/ L'héritage Cours 7 Cours 7.
Argc et argv Utilisation des paramètres de la ligne de commande.
Tutorat en bio-informatique
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Les types composés Les enregistrements.
Les surcharges d'opérateurs
Fonctions avancées et graphiques
ISBN Chapitre 10 L'implémentation des sous- programmes.
8PRO100 Éléments de programmation Les pointeurs de caractères.
Cours LCS N°4 Présenté par Mr: LALLALI
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
Les fonctions. Déclaration/Prototypes C’est une instruction fournissant au compilateur des infos sur une fonction qu’on envisage d’appeler par le suite.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Transcription de la présentation:

Paramètres et pointeurs Relation entre paramètres d'une fonction et pointeurs : comment utiliser des valeurs en entrée et en sortie des fonctions. Remédier à un manque du langage : A part les tableaux, les paramètres des fonctions sont des variables locales : modifications faites dans la fonction non gardées ! Le paramètre d'une fonction est la copie de l'argument : l'argument n'est pas modifié ! Une fonction ne renvoie qu'une valeur. Et si la fonction devait 'renvoyer' plusieurs valeurs ? Calcul de plusieurs valeurs que l'on aimerait récupérer !

Paramètres et pointeurs Une fonction ne renvoie qu'une valeur : règle très stricte, on ne peut pas la changer. Comment faire ? Proposition 1 : utiliser un tableau ! On peut y stocker plusieurs valeurs, et les modifications sont gardées ! Mais ces valeurs doivent avoir le même type ! SI la fonction calcule, par exemple, une valeur de type float et une de type char, on ne peut pas utiliser de tableau (ou alors devient vite compliqué !). Proposition 2 : utiliser un mécanisme permettant de garder les modifications.

Paramètres et pointeurs Ce mécanisme est appelé passage par adresse ou passage par pointeur (c'est la même chose, car un pointeur est une adresse). Plutôt que de fournir à la fonction une valeur, on va fournir son adresse ou un pointeur sur cette valeur. Rappel : une constante n'a pas d'adresse, ce mécanisme n'est utilisable qu'avec des variables. D'ailleurs, peut-on changer la valeur d'une constante numérique ??? Cela n'a pas de sens ! Le mécanisme de transmission argument/paramètre ne change pas, mais c'est ce qui est transmis qui change !

Paramètres et pointeurs Rappel du mécanisme de recopie argument/paramètre : prototype : void entierSuivant(int); définition : void entierSuivant(int par) { par = par+1; } exemple d'utilisation : void main() int arg; arg=4; entierSuivant(arg); /* que vaut arg maintenant ? */

Paramètres et pointeurs Illustration avec schéma blocs : arg par par=par+1; arg=4; entierSuivant(arg); main entierSuivant

Recopie d'adresses La fonction ne remplit pas son rôle : la valeur de arg n'est pas modifiée (et tant mieux !). Que se passe-t-il si, au lieu de transmettre une variable entière, on transmet son adresse ? Au niveau du programme : le paramètre de la fonction n'est plus une valeur entière, mais un pointeur sur une valeur entière, d'où le prototype de la fonction. void entierSuivant(int *); le paramètre est un pointeur : la fonction change, on va modifier le contenu du paramètre, et pas le paramètre :

Recopie d'adresses void entierSuivant(int *par) { *par = (*par)+1; } l'appel change : on doit transmettre une adresse, l'adresse de arg : void main() int arg; arg=4; entierSuivant(&arg); /* que vaut arg maintenant ? */

Recopie d'adresses Reprise du schéma bloc (1/2) main entierSuivant &arg arg par ? *par=(*par)+1; arg=4; entierSuivant(arg); main entierSuivant

Recopie d'adresses Reprise du schéma bloc (2/2) main entierSuivant &arg arg par *par=(*par)+1; arg=4; entierSuivant(arg); main entierSuivant

Recopie d'adresses La recopie a bien lieu : par, pointeur sur entier, reçoit la valeur de &arg, pointeur sur entier, qui pointe sur arg. on voit sur le schéma bloc que la cellule mémoire qui stocke la valeur de arg est partagée entre la fonction et le programme appelant, parce que l'on a transmis l'adresse. Lorsque l'on modifie *par, c'est la valeur de arg qui est modifiée ! La variable locale à la fonction est par, le pointeur, et non *par, la valeur pointée. Ainsi, on respecte les règles pour les passages de paramètre : il y a recopie de l'argument dans le paramètre le paramètre reste une variable locale de la fonction !

Application A partir de cet exemple : écrire une fonction qui calcule le minimum et le maximum de 4 valeurs float. On veut récupérer ces valeurs minimum et maximum dans le programme appelant cette fonction.

Retour sur les tableaux Cette explication permet de voir sous un nouveau jour le comportement des tableaux en tant que paramètres de fonctions. Remarque déjà faite : lorsque l'on transmet un tableau à une fonction, les changements effectués sur les éléments du tableau sont conservés dans le programme appelant ! Cela n'est plus étonnant : un tableau est en fait un pointeur (constant) sur le premier élément qu'il stocke. Ainsi, le phénomène de passage par adresse a lieu avec un tableau. Lorsque l'on utilise un tableau en paramètre de fonction, c'est un passage par adresse qui a lieu !