Zeiger auf Zeiger



  • Wieso brauche ich hier einen Zeiger auf Zeiger...

    void tausch(int** a, int** b)
    {
      int* hilf;
      hilf = *a;
      *a = *b;
      *b = hilf;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
      int a = 3, b = 5;
      int* pa = &a;
      int* pb = &b;
      tausch (&pa,&pb);
    

    und kannst nicht so machen...

    void tausch(int* a, int* b)
    {
      int* hilf;
      hilf = a;
      a = b;
      b = hilf;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
      int a = 3, b = 5;
      tausch (&a,&b);
    

    Danke im voraus
    Elmar



  • so geht's ohne doppel-*

    void tausch(int* a, int* b)
    {
      int hilf;
      hilf = a;
      *a = *b;
      *b = hilf;
    }
    
    int main (int argc, char* argv[])
    {
      int a = 3, b = 5;
      tausch (&a,&b);
    


  • Um Parameter per Referenz-Semantik zu verwenden (d.h. wenn die Funktion etwas an den übergebenen Variablen ändern will), mußt du Zeiger darauf übergeben. Und wenn die Variable selber ein Zeiger ist, ergibt sich dadurch ein "Zeiger auf Zeiger".

    @net: Dein Programm hat aber eine andere Funktion als das von Elmar (er vertauscht die Inhalte von pa und pb, du vertauschst die dahinterstehenden Variablen)



  • CStoll schrieb:

    @net: Dein Programm hat aber eine andere Funktion als das von Elmar (er vertauscht die Inhalte von pa und pb, du vertauschst die dahinterstehenden Variablen)

    ach so, hab' ich verpennt.
    dann so, ohne **

    void tausch (void *a, void *b)
    {
      long hilf;
      hilf = *(long*)a;
      *(long*)a = *(long*)b;
      *(long*)b = hilf;
    }
    
    int main (int argc, char* argv[])
    {
      int a = 3, b = 5;
      int* pa = &a;
      int* pb = &b;
      tausch (&pa,&pb);
    }
    

Anmelden zum Antworten