A voir également:
- Matthias utilise les réseaux sociaux.que doit-il faire dans chacune des situations suivantes ?
- Suivi des modifications word - Guide
- Entrée dans le réseau des pic - Forum Consommation & Internet
- Salut j'utilise whatsapp - Accueil - Messagerie instantanée
- Sandra a décidé de mieux contrôler son image et sa présence sur différents réseaux sociaux. qu’est-il possible de faire sur ces réseaux ? - Forum Facebook
- Comment savoir si quelqu'un utilise mon adresse ip - Guide
3 réponses
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.
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