Strona 1 z 1
Przypisanie wiersza tablicy dwuwymiarowej do jednowymiarowej
: 15 grudnia 2009, 22:25
autor: piter
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:
Kod: Zaznacz cały
#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:
: 15 grudnia 2009, 22:58
autor: mq
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.
: 15 grudnia 2009, 23:06
autor: beel
To może stronę podasz na której to przeczytałeś w tym kursie?
: 15 grudnia 2009, 23:28
autor: Rafal_F
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ą:
Kod: Zaznacz cały
#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];
}
: 16 grudnia 2009, 09:35
autor: piter
beel napisał:
To może stronę podasz na której to przeczytałeś w tym kursie?
Kurs znajduje się tu:
http://www.gamedev.pl/files/articles/me ... %20C++.pdf
Strona nr 122
[ Dodano: |16 Gru 2009|, 2009 22:05 ]
Rafal_F napisał:
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ą
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:
Kod: Zaznacz cały
#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:
jest znacznie prostsze niż użycie kilku pętli:
Kod: Zaznacz cały
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.