Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Struktuurin siirtäminen funktioon

Burton [26.05.2007 20:40:21]

#

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.

Metabolix [26.05.2007 21:02:21]

#

No jo on. Johan kysyit tavallisella tyypillä. Ei se KAPPALE ole ollenkaan ihmeempi kuin int.

Antti Laaksonen [26.05.2007 21:23:07]

#

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;
}

Burton [26.05.2007 21:57:06]

#

Mutta häh, eikös tuo sitten vaadi *-merkkiä, että sen arvoa voisi muuttaa? Olenko käsittänyt kyseisen merkin tarkoituksen aivan väärin :|

Blaze [26.05.2007 22:24:46]

#

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.

Antti Laaksonen [26.05.2007 23:03:37]

#

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.

Burton [26.05.2007 23:23:06]

#

Ahaa! Kiitoksia.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta