Utilisation des fonctions dans c++
Fermé
mohamed
-
10 janv. 2006 à 00:40
mamiemando Messages postés 33030 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 mars 2024 - 9 juin 2006 à 20:33
mamiemando Messages postés 33030 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 mars 2024 - 9 juin 2006 à 20:33
A voir également:
- Matthias utilise les réseaux sociaux. que doit-il faire dans chacune des situations suivantes
- 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 Graphisme
- Paul a publié une annonce dans un groupe sur un réseau social. qui peut voir son annonce - Forum Réseau
- Retrouver moi l'original - Forum Musique / Radio / Clip
- Quelles situations permettront à silvio de ne pas perdre le document important.txt s'il se fait voler son ordinateur ? - Forum Windows
- Les données fournies dans le fichier à télécharger peuvent être synthétisées par le tableau récapitulatif suivant. dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des 4 premières colonnes. cinq valeurs manquent dans le tableau suivant. retrouvez-les dans votre tableau puis reportez-les, arrondies à l’entier le plus proche, dans la zone de réponse. ✓ - Forum Jeux vidéo
3 réponses
Jean-François Pillou
Messages postés
18707
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 265
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
33030
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
28 mars 2024
7 736
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