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
Salut vous pouver m'aider a comprendre comment intergrer des fonctions dans un programme c++

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
0
joseph mie ruth
9 juin 2006 à 17:34
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.
0
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
1) Rappels : Adresse, références, ...

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
0