Utilisation des fonctions dans c++
Fermé
mohamed
-
10 janv. 2006 à 00:40
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 9 juin 2006 à 20:33
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 9 juin 2006 à 20:33
A voir également:
- Matthias utilise les réseaux sociaux. que doit-il faire dans chacune des situations suivantes
- Suivi des modifications word - Guide
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image de manchots sur une image de plage. retrouvez l'image originale de la plage. que cachent les manchots ? - Forum Musique / Radio / Clip
- Paul a publié une annonce dans un groupe sur un réseau social. qui peut voir son annonce - Forum Réseau
- Matthias utilise les réseaux sociaux. que doit-il faire dans chacune des situations suivantes ? ✓ - Forum Vos droits sur internet
- Comment savoir si quelqu'un utilise mon adresse ip - Guide
3 réponses
Jean-François Pillou
Messages postés
18301
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
10 janv. 2006 à 11:07
10 janv. 2006 à 11:07
SALUT, j'aimerais avoir des informations concernant la fonction en C++.
En plus un exmple montrant comment passer un tableau en parametre a une fonction.
La difference entre argument passe par valeur et argument passe par reference.Mercie bien pour les reponses.
En plus un exmple montrant comment passer un tableau en parametre a une fonction.
La difference entre argument passe par valeur et argument passe par reference.Mercie bien pour les reponses.
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
9 juin 2006 à 20:33
9 juin 2006 à 20:33
1) Rappels : Adresse, références, ...
Considérons le code suivant :
Un argument passé par argument à une fonction f est recopié en mémoire. Toute modification apportée à un argument n'est prise en compte que dans le corps de cette fonction.
Si l'argument est passé en référence, tout se passe en mémoire comme si on passait un pointeur, sauf que syntaxiquement parlant, tout se passe comme si on manipulait directement l'objet (fonction g).
Je te redonne la syntaxe quand on passe l'adresse d'un paramètre. C'est cette méthode qui est utilisé en C car les références n'existent qu'en C++. Notons que contrairement à une référence, on n'est pas obligé d'initialiser un pointeur (une adresse).
L'intérêt du passage par référence (ou par pointeur) est qu'il est très rapide si le paramètre est gros, car on ne recopie que l'adresse en mémoire (alors que sinon on récopie tout l'objet). De plus le passage par référence / pointeur permet de modifier un paramètre. Ca permet par exemple de renvoyer un code d'exécution tout en stockant des résultats dans des variables passées en paramètre. Exemple :
2) Passer un tableau en paramètre
Si tu utilises un std::vector<int> on passe la référence surtout si ce vector est grand :
Si tu utilises un tableau classique int * :
On pourrait mettre int * & mais comme un int * est déjà une adresse il n'y a rien a gagner...
Bonne chance
Considérons le code suivant :
#include <iostream> void f(int i){ ++i; std::cout << "f : i = " << i << std:endl; // affiche 1 } void g(int j){ ++j; std::cout << "g : j = " << j << std:endl; // affiche 1 } void h(int *k){ ++ (*k); std::cout << "h : (*k) = " << (*k) << std:endl; // affiche 1 } int main(){ int i=0; f(i); std::cout << "main : i = " << i << std::endl; //affiche 0 int j=0; g(j); std::cout << "main : j = " << j << std::endl; //affiche 1 int k=0; h(&k); std::cout << "main : k = " << k << std::endl; //affiche 1 return 0; }
Un argument passé par argument à une fonction f est recopié en mémoire. Toute modification apportée à un argument n'est prise en compte que dans le corps de cette fonction.
Si l'argument est passé en référence, tout se passe en mémoire comme si on passait un pointeur, sauf que syntaxiquement parlant, tout se passe comme si on manipulait directement l'objet (fonction g).
Je te redonne la syntaxe quand on passe l'adresse d'un paramètre. C'est cette méthode qui est utilisé en C car les références n'existent qu'en C++. Notons que contrairement à une référence, on n'est pas obligé d'initialiser un pointeur (une adresse).
L'intérêt du passage par référence (ou par pointeur) est qu'il est très rapide si le paramètre est gros, car on ne recopie que l'adresse en mémoire (alors que sinon on récopie tout l'objet). De plus le passage par référence / pointeur permet de modifier un paramètre. Ca permet par exemple de renvoyer un code d'exécution tout en stockant des résultats dans des variables passées en paramètre. Exemple :
#include <string> int init_string(std::string & s){ if (s=="tapir"){ s="plop"; return 0; } s="tapir"; return 1; }
2) Passer un tableau en paramètre
Si tu utilises un std::vector<int> on passe la référence surtout si ce vector est grand :
#include <vector> void f(std::vector<int> & v){}
Si tu utilises un tableau classique int * :
void f(int * v){}
On pourrait mettre int * & mais comme un int * est déjà une adresse il n'y a rien a gagner...
Bonne chance