Array von Zeigern auf Zeiger



  • Wie kann ich den ein array von zeigern (int *p2[10]) auf einen Zeiger in einer Funktion übergeben?

    void func(int *temp)
    

    Also ich will nach möglichkeit in der Funktion nicht irgendwie angeben wie viele Felder. Was gäbe es den da für Möglichkeiten?
    Bzw. soll ich die Adresse vom Zeiger vll. besser auf ein "**" übergeben.
    Ich brauch zumindestens in meiner funktion irgndwie zugriff auf int *p2[10]

    Dankeschön schon mal im Voraus.

    MfG
    Stromberg



  • Der Typ muss **int sein und du musst die Feldlänge mit übergeben. Oder am besten gleich auf derartige Arrays verzichten und lieber boost::array // std::tr1::array nutzen.



  • Mhm irgendwas mach ich immer noch falsch, dass hier führt zu einem System Error:

    #include <iostream>
    using namespace std;
    
    void func(int **temp)
    {
        cout << (*temp)[0] << endl;
    
    }
    
    int main()
    {
    
        int a = 10;
        int b = 20;
        int c = 30;
        int d = 40;
    
        int *p2[4];
        p2[0] = &a;
        p2[1] = &b;
        p2[2] = &c;
        p2[3] = &d;
    
        func(&p2[4]);
    
        return 0;
    }
    

    MfG
    Stromberg



  • Achte darauf welche Operatoren eine höhere Priorität haben.



  • Ernstgemeinte Frage: Was zur Hölle hast du dir dabei gedacht?

    func(&p2[4]);
    
    1. Greifst du auf Speicher außerhalb deiner Arraygrenzen zu:
    p2[4]
    
    1. Holst du dir von diesem ungültigen Speicher die Adresse.
    &...
    


  • Warum so umständlich? Nimm doch einfach einen std::vector.



  • Beim genauren ansehen.. Was für einen Mist machst du bitte in Zeile 26? Du greifst auf einen Index im Array zu, das nicht existiert. Am besten du benutzt gleich C++ Strukturen wie std::vector oder boost::array, dann machst du so einen Mist gar nicht erst.



  • Stromberg* schrieb:

    Wie kann ich den ein array von zeigern (int *p2[10]) auf einen Zeiger in einer Funktion übergeben?

    #include <iostream>
    
    void func(int **temp)
    {
      std::cout << *temp[0] << '\n';
      std::cout << *temp[1] << '\n';
      std::cout << *temp[2] << '\n';
    }
    
    int main()
    {
      int a = 10;
      int b = 11;
      int c = 12;
      int *avz[3] = {&a, &b, &c};
      func(avz);
    }
    

    Beachte, *temp[1] steht für *(temp[1]) und nicht (*temp)[1] . Das ist ein wichtiger Unterschied. Beachte, dass zeiger[x] dasselbe ist wie *(zeiger+x) . Damit hast Du folgendes:

    *temp[1]  --> *(*(temp+1))
    (*temp)[1] --> *((*temp)+1)
    

    Du solltest vielleicht weniger spezielle Fragen stellen und mehr von dem Problem erzählen, was Du hier zu lösen versuchst. Es gibt sicherlich bessere Alternativen, als sich mit Doppel-Zeigern rumzuärgern. Aber verstehen solltest Du diese Sache natürlich trotzdem.



  • Oh blöd: func(&p2[4]); war halt schon n bissel spät. 🙂

    Gruß
    Stromberg


Anmelden zum Antworten