Nyt jatkuu taas minun funktio-ongelmani. En keksi, miten onnistuisin siirtämään oman struktuurin funktioon.
Jos struct on muotoa:
typedef struct { int x,y; } KAPPALE;
ja määritellään taulukko:
KAPPALE a[10];
niin kuinka tuo siirretään funktioon?
Kokeilin jo näin:
void funktio(KAPPALE *taulukko[]) { /* tarkoitus olisi voida muokata arvoja. */ ... }
mutta tämä tuotti erroria, joten oletan sen olevan väärä tapa.
No jo on. Johan kysyit tavallisella tyypillä. Ei se KAPPALE ole ollenkaan ihmeempi kuin int.
Käytännössä koodi menee suunnilleen näin:
void funktio(KAPPALE taulukko[]) { taulukko[5].x = 3; } int main(void) { KAPPALE a[10]; a[5].x = 7; printf("%i\n", a[5].x); funktio(a); printf("%i\n", a[5].x); return 0; }
Mutta häh, eikös tuo sitten vaadi *-merkkiä, että sen arvoa voisi muuttaa? Olenko käsittänyt kyseisen merkin tarkoituksen aivan väärin :|
Burton kirjoitti:
Mutta häh, eikös tuo sitten vaadi *-merkkiä, että sen arvoa voisi muuttaa?
Muuten joo, mutta kun taulukko on jo itsessään pointteri :)
nimi[] ja *nimi on sama asia.
Funktioon lähetetään aina taulukon aloitusosoite muistissa, eli taulukkoa pystyy myös muuttamaan ilman erikoisjärjestelyjä. Funktion kutsussa a on lyhennys muodosta &a[0], ja funktion määrittelyssä taulukko[] tarkoittaa tosiaan samaa kuin *taulukko. Jos laittaa sekä tähden että hakasulut, määrittely on vähän "tårta på tårta" eli sama asia moneen kertaan.
Ahaa! Kiitoksia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.