Otsikko kertoo kaiken. Jos minulla on taulukko[20][20], niin kuinka siirrän sen funktioon käytettäväksi?
mitä eroa on näillä:
void funktio(char *taulukko[]); void funktio(char taulukko[][20]);
Noiden erosta en tiedä, mutta funktiolle voi antaa vaikka kuinka moniulotteisen taulukon antamalla osoittimen taulukon ensimmäiseen alkioon.
void funktio(char *taulukko); char taulukko[20][20]; funktio(taulukko); //pelkkä taulukon nimi on osoitin ensimmäiseen alkioon.
Ei, Lahhan tapa ei toimi. Eihän tuota char*-muotoa voi nyt käyttää samalla tavalla kuin alkuperäistä taulua, jos ollenkaan. (Eikä sitä ainakaan välitetä funktiolle noin!)
Jos taulun mitat tiedetään, sen voi välittää tavoista kaikkein loogisimmalla. Muussa tapauksessa helpointa on käyttää yksiulotteista taulua, jonka tietty alkio lasketaan kaavalla y * xkoko + x
.
void funktio(char taulu[20][20]); char taulukko[20][20]; funktio(taulukko);
void funktio(char *taulu, const int xkoko, const int ykoko); const int leveys = 17, korkeus = 13; char taulukko[leveys * korkeus]; funktio(taulukko, leveys, korkeus); void funktio(char *taulu, const int xkoko, const int ykoko) { int x, y; for (y = 0; y < ykoko; ++y) { for (x = 0; x < xkoko; ++x) { taulu[xkoko * y + x] = 0; } } }
Kiitos vastauksista! Nyt toimii todella hyvin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.