Mehrdimensionales Array mit Pointer ausgeben



  • Hallo.
    Ich versuche gerade ein mehrdimensionales Array mittels Pointer ausgeben zu lassen:

    //irgendein Array
    int bla[3][2] = {{10, 12}, {1, 20}, {34, 32}};
    

    Nur weiß ich jetzt nicht, wie man dieses mittels Pointerarithmetik ausgeben kann...

    Gruß Speedy_92



  • int* p = &bla[0][0];
    	std::cout << *p << std::endl;
    

    ? 🙄



  • Ich habe mich undeutlich ausgedrückt. Entschuldige.
    Ich meine, wie man alle Elemente ausgeben kann... eines ist ja nicht das Problem.



  • Achja... hier ist mein erster Gehversuch:

    int bla[3][2] = {{10, 12}, {1, 20}, {34, 32}};
    	int (*p_bla)[2] = &bla[0];
    
    	for(int i = 0; i < 3; i++)
    	{
    		for(int j = 0; j < 2; j++)
    		{
    			std::cout<<*(p_bla + i)[j]<<std::endl;
    		}
    	}
    


  • Ich habe es hinbekommen...
    Es muss so heißen

    std::cout<<(*(p_bla + i))[j]<<std::endl;
    

    Aber ich verstehe ehrlich gesagt nicht, warum ich erst dereferenzieren muss und dann indiezieren... Wieso muss es nicht andersherum sein?



  • Speedy_92 schrieb:

    Ich habe es hinbekommen...
    Es muss so heißen

    std::cout<<(*(p_bla + i))[j]<<std::endl;
    

    Es kann so heissen.

    Aber der Sinn dahinter verbirgt sich mir immernoch. 🙂



  • Vielleicht so?

    for (int* p = &bla[0][0] ; p < &bla[2][2] ; ++p)
        cout << *p << " | " ;
    


  • drakon schrieb:

    Speedy_92 schrieb:

    Ich habe es hinbekommen...
    Es muss so heißen

    std::cout<<(*(p_bla + i))[j]<<std::endl;
    

    Es kann so heissen.

    Aber der Sinn dahinter verbirgt sich mir immernoch. 🙂

    Was meinst du damit?
    Gibt es eine bessere/schnellere/sinvollere/einfachere Methode dies Problem zu lösen?



  • Speedy_92 schrieb:

    Was meinst du damit?
    Gibt es eine bessere/schnellere/sinvollere/einfachere Methode dies Problem zu lösen?

    Mann kann es sich beliebig kompliziert machen. Da bleibt der Fantasie fast keine Grenzen gesetzt. 😉

    Warum gibst du es denn nicht so aus:

    int bla[3][2] = {{10, 12}, {1, 20}, {34, 32}};
    
    for (int i = 0; i < 3; i++)
        for (int y = 0; y < 2; y++)
            std::cout << bla[i][y] << std::endl;
    


  • Ja, so weiß ich auch wie es geht 😉

    Nur brauchte ich es gerade, weil ich Pointer richtig verstehen muss 🙂



  • Also wenn schon Zeigernotation, dann aber auch bitte vollständig und nicht so etwas Halbes.

    siehe hier:

    int feld[2][2] = {1,2,3,4};
    
    for (int i=0; i<2; i++)
    {
        for (int j=0; j<2; j++)
        {
            // cout << feld[i][j] << " "; 
            // ist dasselbe wie:
    
            cout << (*(*(feld + i))+j) << " ";
        }
        cout << endl;
    }
    

Anmelden zum Antworten