Comparaison entre 2 fonctions

Signaler
Messages postés
1
Date d'inscription
samedi 27 septembre 2008
Statut
Membre
Dernière intervention
1 octobre 2008
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Est-ce que ces 2 fonctions sont equivalentes?

void f1(char *t)
{
    if (t!=0)
    {
        while(*t!=0)
        {
            cout<<*t;
            t++;
        }
    }
}

void f2(char &t)
{
    while (t!=0)
    {
        cout<<t;
        t++;
    }
}

3 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
salut


non, leur utilisation n'est pas equivalente, et ton t++ n'agit pas sur la meme chose (adresse / valeur)

Bref, ce ne sont pas DU TOUT les memes fonctions.

En C, les references n'existent pas (donc ta seconde fonction ne compile pas)
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Salut,

Par contre, strictement même code machine pour f1 et f2 dans le code suivant :


<hr />
#include using namespace std;

void f1(int *t)
{
  (*t)++;
}

void f2(int &t)
{
  t++;
}

int main(int argc, char* argv[])
{
  int t1 = 1;
  int t2 = 1;

  f1(&t1);
  f2(t2);

  cout << t1 << endl;
  cout << t2 << endl;

  return 0;
}
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Les références (Du moins celles du C++), c'est vraiment pas mon truc.

Je ne parviens pas à faire progresser une référence comme on peut le faire pour un pointeur sans passer par de l'asm.


<hr />
#include using namespace std;

void __stdcall f1(char* t)
{
  while(*t != 0)
  {
    cout << *t;
    t++;
  }
}

void __stdcall f2(char& t)
{
  while (t != 0)
  {
    cout << t;
    __asm
    {
      inc dword ptr [ebp + 8]
    }
  }
}

int main(int argc, char* argv[])
{
  char* t = "toto\n";

  f1(t);
  f2(*t);

  system("pause");

  return 0;
}