Comparaison entre 2 fonctions

cyss Messages postés 1 Date d'inscription samedi 27 septembre 2008 Statut Membre Dernière intervention 1 octobre 2008 - 1 oct. 2008 à 12:16
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 2 oct. 2008 à 14:58
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

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 oct. 2008 à 13:52
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)
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
2 oct. 2008 à 12:32
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;
}
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
2 oct. 2008 à 14:58
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;
}
0
Rejoignez-nous