Anzahl der elemente in zeiger ermitteln



  • leider nicht. 😞
    du brauchst irgendwie eine ende-kennung, z.b. letztes element+1 ist 0.
    am besten ist wohl, man speichert sich irgendwo die anzahl gültiger elemente, um nicht jedesmal nach der ende-kennung zu suchen....



  • oh nein!
    ist dann möglich diese char ** in ein array umzuwandeln?



  • Im allgemeinen nicht - das geht nur in Spezialfällen (d.h. wenn die Größe bereits zur Compilezeit feststeht). Und selbst dann wird das Array wieder in einen Pointer konvertiert, sobald du es durch dein Programm durchreichst.



  • CStoll schrieb:

    das geht nur in Spezialfällen (d.h. wenn die Größe bereits zur Compilezeit feststeht).

    wie meinst du das? hast du ein beispiel?
    🙂



  • wie meinst du das? hast du ein beispiel?

    Ich nehme an, CStoll meint soetwas:

    void Foo(int foo[])
    {
        std::cout << sizeof(foo) / sizeof(foo[0]); // funktioniert nicht mehr, ist "nur" noch pointer
    }
    
    int main(int argc, char* argv[])
    {
        int foo[12];
        int array_size = sizeof(foo) / sizeof(foo[0]);
        std::cout << array_size; // funkioniert: 12
        Foo(foo);
    }
    


  • Wenn du zur Compilezeit deine Werte vorgegeben hast, kannst du sie in einem Array unterbringen:

    char* tage[] = {"Montag","Dienstag","Mittwoch","Donnerstag",
                    "Freitag","Samstag","Sonntag"};
    int tage_zahl = sizeof(tage)/sizeof(tage[0]);//hier kannst du noch die Array-Größe ermitteln
    
    drucke(tage);//Die Funktion bekommt weiterhin einen char** - d.h. ihr müsstest du sagen, wie groß das Array wirklich ist
    


  • oder noch etwas anders (wie auch oft in der Praxis verwendet):

    #define BUFFSIZE 1024
    
    int main()
    {
      char buffer[BUFFSIZE];
    }
    

    Funktioniert natürlich nur bei "statischen" Arrays und nicht dynamisch allokierten 🙂



  • CStoll schrieb:

    Wenn du zur Compilezeit deine Werte vorgegeben hast, kannst du sie in einem Array unterbringen:

    char* tage[] = {"Montag","Dienstag","Mittwoch","Donnerstag",
                    "Freitag","Samstag","Sonntag"};
    ...
    

    ach so, aber trotzdem: du wandelst keinen char** in ein array um, wonach toror eigentlich fragte, sonderst initialisierst ein array.
    zur laufzeit neue arrays erzeugen geht ja auch gar nicht...
    🙂



  • pale dog schrieb:

    zur laufzeit neue arrays erzeugen geht ja auch gar nicht...
    🙂

    hö? 😮
    Das wäre mir neu 😉 wieso sollte man zur Laufzeit keine Arrays erzeugen können? oder hast du das anders gemeint?



  • codefrag schrieb:

    pale dog schrieb:

    zur laufzeit neue arrays erzeugen geht ja auch gar nicht...
    🙂

    hö? 😮
    Das wäre mir neu 😉 wieso sollte man zur Laufzeit keine Arrays erzeugen können? oder hast du das anders gemeint?

    ääh ja, ich hab' mich mal wieder undeutlich ausgedrückt. ich meinte die richtigen arrays (die im statischen datensegment, z.b. int a[...]; )
    mit 'malloc' o.ä. kann man sich natürlich schon neue arrays machen ...
    🙂



  • pale dog schrieb:

    ach so, aber trotzdem: du wandelst keinen char** in ein array um, wonach toror eigentlich fragte, sonderst initialisierst ein array.
    zur laufzeit neue arrays erzeugen geht ja auch gar nicht...
    🙂

    Wie ich schon sagte - es geht nur in Spezialfällen (und auch nur in dem Sinn, daß man von vornherein anstelle des char**, ein char*-Array verwendet).


Anmelden zum Antworten