ďťż
 
 
   Przypisanie wiersza tablicy dwuwymiarowej do jednowymiarowej
 
 

Tematy

 
    
 

 

 

 

Przypisanie wiersza tablicy dwuwymiarowej do jednowymiarowej





piter - 15-12-2009 22:25
Przeczytałem w kursie C++ "Od zera do gier kodera", że można przypisać wiersz tablicy dwuwymiarowej do jednowymiarowej w następujący sposób:
#include <iostream>
using namespace std;

int main()
{
        unsigned aTab2D[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
        unsigned aTab1D[3];
       
        aTab1D = aTab2D[0];
} Jednak przy próbie skompilowania otrzymuje błąd:
kod.cc:9: error: invalid array assignment



mq - 15-12-2009 22:58
Coś takiego to mógłbyś (chyba) zrobić w javie, gdzie zmienne aTab2D i aTab1D byłyby referencjami (ruchomymi). W c++ to również są referencje, ale nieruchome, nie możesz ich sobie tak po prostu przypisywać. Z tego co wiem o c++, to przepisania zawartości jednej tablicy (albo jej części) do innej trzeba dokonać w pętli.



beel - 15-12-2009 23:06
To może stronę podasz na której to przeczytałeś w tym kursie?



Rafal_F - 15-12-2009 23:28
W C++ nie można zmieniać adresu na który wskazuje nazwa tablicy. Więc albo przypisanie zrobisz w pętli, albo zmienną aTab1d zrobisz wskaźnikiem na unsigned a nie tablicą:
#include <iostream>

using namespace std;

int main()
{
    unsigned aTab2D[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
    unsigned *aTab1D;

    aTab1D = aTab2D[0];
}



piter - 16-12-2009 09:35
beel napisał:
Kurs znajduje się tu:
http://www.gamedev.pl/files/articles...Kurs%20C++.pdf

Strona nr 122

[ Dodano: |16 Gru 2009|, 2009 22:05 ]
Rafal_F napisał:
Pętla jest chyba najbardziej oczywistym rozwiązaniem, które jako pierwsze nasunęło mi się na myśl. Przykład, który podałem jest bardzo prosty - wystarczy zastosować jedną pętle. Sytuacja komplikuje się gdy tablice będą miały więcej wymiarów - wtedy trzeba robić pętle w pętli np:
#include <iostream>
using namespace std;

int main()
{
        unsigned aTab3D[2][2][2] = { { {1, 2}, {3, 4} }, { {5, 6}, {7, 8} } };
        unsigned aTab2D[2][2];
       
        for (unsigned i = 0; i < 2; ++i) for (unsigned j = 0; j < 2; ++j) aTab2D[i][j] = aTab3D[0][i][j];
} Rozwiązanie podane w kursie:
aTab2D = aTab3D[0]; jest znacznie prostsze niż użycie kilku pętli:
for (unsigned i = 0; i < 2; ++i) for (unsigned j = 0; j < 2; ++j) aTab2D[i][j] = aTab3D[0][i][j]; Niestety nie działa.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis