Array per Pointer "übergeben"...



  • Hi Leute,
    warum funktioniert nachfolgender code an der STelle nicht wo das array übergeben werden soll:

    void printArray(char** textArray)
    {
    	//Array-Ausgabe
    	for(int i=0; i<2; i++)
    	{
    		for(int j=0; j<7; j++)
    		{
    			cout << textArray[i][j];
    		}
    		cout << endl;
    	}
    }
    
    int main()                             
    {   
    	char str[256], textArray[100][100];
    
    	printArray(textArray);
    
    return 0;                           
    }
    

    Kann mir jemand helfen?



  • void printArray(char (*textArray)[100])
    {
        //...
    }
    


  • out: Wieso keine const-Referenz?



  • Sone schrieb:

    out: Wieso keine const-Referenz?

    Hat kein Grund, aber der Vollständigkeit halber:

    void printArray(const char (&textArray)[100][100])
    {
        // ...
    }
    

    Aber das machts auch net besser, beides ist doch scheiße.



  • Danke so geht das!



  • out schrieb:

    void printArray(const char (&textArray)[100][100])
    

    Aber das machts auch net besser, beides ist doch scheiße.

    Was soll der Schrott denn?
    Was willst du dem Frager hiermit sagen?
    Richtig! Du verwirrst ihn nur und schreibst im Sinne eine Forums Müll.

    void printArray(const char (*textArray)[100])
    void printArray(const char textArray[][100])
    void printArray(const char textArray[4711][100])
    

    @Frager: such dir was aus, ist alles äquivalent.



  • Wutz schrieb:

    out schrieb:

    void printArray(const char (&textArray)[100][100])
    

    Aber das machts auch net besser, beides ist doch scheiße.

    Was soll der Schrott denn?.

    Hast du alles gelesen? Ich habe sones Beitrag weitergeführt, nicht mehr nicht weniger. Außerdem habe ich geschrieben, dass es scheiße ist. Deins ist auch net besser.



  • Wutz schrieb:

    @Frager: such dir was aus, ist alles äquivalent.

    Stimmt nicht. (&textArray)[100][100] hat einen Sonderstatus und ist besser als deine Vorschläge.



  • Ja, denn die Übergabe ist bei deiner zweiten Lösung anders.
    Außerdem kann man outs Lösung nur ein char Array der Größe 100x100 übergeben.



  • vip@r schrieb:

    warum funktioniert nachfolgender code an der STelle nicht wo das array übergeben werden soll:

    void printArray(char** textArray)
    {}
    
    int main()                             
    {   
    	char textArray[100][100] = {};
    	printArray(textArray);
    

    Warum das nicht funktioniert, sagt doch bestimmt der Compiler. Die Typen passen nicht zusammen. Du kannst eine char**-Variable nicht mit einem char[100][100]-Lvalue initialisieren. Array-to-Pointer decay gibt es nur auf der obersten Ebene. Also char[100][100] --> char()[100]; denn char[100][100] ist ein Array von 100 Arrays mit je 100 chars. Und die Adresse auf das erste Element des Arrays, also die Adresse auf das erste 100-char-Array hat nunmal den Typen char()[100] und nicht char**, da lezteres der Typ für eine Adresse eines char-Zeigers ist. Zeiger sind aber keine Arrays. Arrays sind aber keine Zeiger. Ich wiederhole mich: ARRAYS SIND KEINE ZEIGER. ZEIGER SIND KEINE ARRAYS.

    vip@r schrieb:

    Kann mir jemand helfen?

    Siehe Zeiger/Arrays in der C FAQ.
    Verwendende std::vectorstd::string statt char[100][100].

    Achja, nochwas: Arrays sind keine Zeiger. Zeiger sind keine Arrays!

    Ich weiß nicht, ob ich hier überreagiere, aber dieses Thema kommt gefühlt 3mal im Monat dran. Kann es denn so schwer sein, sich mal selbst um das Problem, was ja scheinbar zig andere Leute auch hatten und oft diskutiert wurde, zu kümmern? *seufz*


Anmelden zum Antworten