Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Pointterit, osoittimet, osotteet?!?!

verho88 [20.08.2008 01:46:33]

#

Oon nyt koittanut vääntää ja kääntää, mutta oon mennyt suoraan sanoeni aivan totaalisesti sekaisin noista pointtereista yms. Siis tajuan kyllä perusajatuksen, mutta sitten hieman hankalampaa hommaa en ymmärräkään.

Eli selitänpä ongelman.

mainin sisällä mulla on pointterin luonti tällain:

Uint8* nappi;

Ja jos käytän sitä normaalisti mainin sisällä funktiolla:

nappi = SDL_GetKeyState(NULL);

homma toimii, ja saan luettua näppäimet ok.

Mutta sitten, jos haluaisin sen laitettua funktioon asia ei enää toimikaan:

void LueSyotteet(Uint8* nappi)
{
    nappi = SDL_GetKeyState(NULL);
    return;
}

//mainissa kutsun näin
LueSyotteet(nappi);

mitään virhettä ei tule, mutta ohjelma käy nopeasti päällä ja sammuu heti.
Eli mikä voi olla vikana vai onko mikään?

Toinen kysymys:

Mulla on funktio joka toimii ja lataa mulle tekstuurin, mutta kysyn, että kummin päin pointterit yms. pitää laittaa että funktiolle lähetetään vain muuttujan osoite ja muokkaa siten muuttujaa, eikä koko tekstuurin dataa vai toimiiko se jo nyt niin?
Eli pitääkö mainissa laittaa &-merkkia vai funktion esittelyssä vai jotain muuta?

Eli koodia:

//mainista kutsu
lataaTekstuuri("intro.png", textuuri)
//ja itse funktio
int lataaTekstuuri(char *fileName, GLuint &tekstuuri)
{
}

En viitsinyt koko funktiota laittaa, mutta jos sen tarvitsee niin kysykää..

vidar [20.08.2008 07:20:17]

#

LueSyotteet() ottaa pointterin 8-bittiseen kokonaislukuun, muuttaa sitä ja palautuu. Sama homma kuin ottaisi pelkän kokonaisluvun, eli parametrin kopiota muutetaan ja muutokset eivät tietenkään heijastu alkuperäiseen muuttujaan. Muutosten täytyy kohdistua muuttujaan, johon kopioitu parametri osoittaa/viittaa, eli Uint8** nappi, johon luetaan sitten *nappi = SDL_GetKeyState(NULL), eli napin osoittamaa tietoa muokataan, ei nappi-muuttujaa itseään.

Jälempi näyttää ihan oikealta, mitänyt "intro.png" palauttaa const char -pointterin, jota tyyppiä myös fileNamen olisi hyvä olla, koska tiedostonimeä ei tarvitse muuttaa kutsuvaan paikkaan. Sanottaessa pelkästään textuuri kääntäjä päättelee kontekstista tarvitaanko textuurin arvoa vai viittausta siihen. Funktion esittelyssä & tarvitaan, koska GLuint on eri tyyppiä kuin GLuint&.

Toivottavasti ei tullut pahoja asiavirheitä, kun näin aamusella kirjoittelin.

Gaxx [20.08.2008 07:45:12]

#

Tai sitten ehkä suositeltavampi tapa käyttää viittausta, jolloinka funktio menisi muotoon:

void LueSyotteet(Uint8*& nappi)
{
    nappi = SDL_GetKeyState(NULL);
    return;
}

Ja kutsuttaisiin suoraan:

Uint8* nappi;
LueSyotteet(nappi);

Blaze [20.08.2008 08:55:04]

#

Gaxx kirjoitti:

Tai sitten ehkä suositeltavampi tapa käyttää viittausta

Joka on sitten C++:aa.

verho88 [20.08.2008 13:59:54]

#

Joo noniin nyt toimii näppäimet taas! Kiitän suuresti vastauksista.

Vastaus

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

Tietoa sivustosta