mamy sobie np zmienną int x[2][4];
Czy istnieje jakiś szybki sposób na wypełnienie tej tablicy danymi?
coś w stylu x = {1,2,3,4}, {1,2,3,4}};
zaznaczam, że nie chodzi mi wypełnianie wartościami podczas inicjowania zmiennej.
mamy sobie np zmienną int x[2][4];
Czy istnieje jakiś szybki sposób na wypełnienie tej tablicy danymi?
coś w stylu x = {1,2,3,4}, {1,2,3,4}};
zaznaczam, że nie chodzi mi wypełnianie wartościami podczas inicjowania zmiennej.
Wydaje mi się ze nie.
Nie, takiej inicjacji nie można wykonać w innym momencie niż przy inicjacji zmiennej jak sama nazwa wskazuje z resztą :P
Inicjalizacja czy inicjacja w końcu? :P Inicjalizacja to słowo z angielskiego ale nie mam pewności czy występuje w słowniku.
Dobra, to może coś innego.
Dajmy na to, niech będzie sobie taka struktura:
struct MyChar {
int x;
int y;
int val[30][30];
};
W jaki sposób zainicjować zmienną typu tej struktury?
MyChar x = {10,10, { elementy tablicy ... }} nie działa:/
MyChar data;
data.x = 1;
data.y = 2;
data.val[0][0] = 3;
IMHO coś takiego...
struct MyChar {
int x;
int y;
int val[30][30];
} m = { .val = {{1,2,3,4}, {1,2,3,4}}};
Mamo! Czemu oni mnie zmuszają do tego języka!! ;(
Naprawdę to jest jedyny sposób? I jak chcę wypełnić całą tablicę to muszę to zrobić na 900 linii?!
przecież to jakaś porażka :/ dane muszę koniecznie umieścić w kodzie...
Możesz zdefiniować tablice z danymi, a potem ładować je w pętli do struktury.
Możesz zrobić w miarę wygodnie to, co chcesz. Rozumiem, że masz tablicę -- nazwijmy ją A -- i to ona jest zmienną. Chcesz ją wypełnić jakimiś stałymi wartościami, ale nie możesz tego zrobić przy inicjalizacji zmiennej (co do słowa, to w słowniku "inicjalizacji" nie ma, ale p. Grębosz w Symfonii pisał, że lepiej chyba używać właśnie jego, bo "inicjacja" znaczy... zresztą, sprawdź sam w słowniku :)).
Taki problem może zaistnieć, gdy ta... nie-inicjalizacja ma nastąpić tylko pod jakimś warunkiem. Np. w jakiejś funkcji. Gdy w programie zajdzie jakaś akcja (która nie musi zawsze zajść), to odpalana jest funkcja F i ona ma wstawić do A jakieś wartości.
Możesz to rozwiązać, definiując sobie w funkcji F drugą tablicę, nazwijmy ją B. Tablicę B możesz tam całkowicie normalnie zainicjalizować. Następnie wartości z tablicy B możesz przepisać do tablicy A. W przypadku tablicy dwuwymiarowej, będziesz potrzebował zagnieżdżonej pętli for (dwóch forów; no i uważaj na indeksy/rozmiary tablic!).
Wiem, że pisanie dwóch forów to pewien ból, ale to tylko parę linijek, a będziesz miał swój upragniony, elegancki zapis "inicjalizacyjny". Oczywiście, do kopiowania tablic nie musisz nawet używać pętli for. Możesz skopiować pewien obszar pamięci, czy -- w określonych okolicznościach -- po prostu przypisać wskaźnik. Ale może użycie forów wyda Ci się najlogiczniejsze/najczytelniejsze.
edit: Jak można się domyśleć, kolega powyżej dodał posta w momencie gdy ja pisałem swojego.
generalnie to problem jest trochę bardziej złożony.
tablicy ma max 30x30.
Strukturę stosuję do tego, żeby określić za pomocą zmiennych x i y, gdzie kończy się użyteczna część tablicy. mało będzie takich tablic, które chciałbym inicjować dokładnie przez wypisanie 900 wartości. Żeby trzymać w innym miejscu zainicjowaną tablicę, to i tak musiałbym przechowywać jej rozmiar (np 10x25) więc problem się po prostu powtarza :/