Miten palauttaa aliohjelmasta useampi tieto

Aliohjelma laskeskelee useampia asioita... Miten aliohjelmasta palautetaan useampia tietoja (paluuarvoja)?
4486
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

... joka osoittaa structiin tai taulukkoon. Oletan kielenä olevan C, koska et maininnut. Varaa muistia funktiossa, kopioi arvot sinne ja palauta muistin osoitin. Funktiota kutsuvan vastuulla on sitten vapauttaa muistialue.

Jos funktiota kutsutaan usein, tehokkaampi vaihtoehto on vaatia parametreinä "työalue" (ja sen koko) jonne data kopioidaan. Jos koko ei riitä, paluuarvona annetaan riittävä muistialueen koko. Näin funktiota kutsuva voi varata muistin etukäteen ja uusiokäyttää samaa varattua aluetta monta kertaa. Tämä tekee kutsumisesta työläämpää, mutta kokonaisuus on nopeampi, koska muistin varaus ja vapautus on usein melko hidas operaatio.

Voit myös aina määritellä funktion parametreinä osoittimia. Tällöin paluuarvoa käytetään perinteisesti vain virhetilanteiden raportointiin.

include errno.h
include stdio.h

int funktio(int luku1, luku2, int *summa, int *vahennys)
{
if(summa == NULL || vahennys == NULL)
return EFAULT; /* Ohjelman sisäisien NULL-arvojen tutkimista tulisi välttää, paitsi kun ollaan esim. tekemisissä ulkopuolelta tulevan datan kanssa. Rakenteesta tulisi tehdä sellainen, että NULL-arvot eivät ole mahdollisia. Debug-versioissa tietysti käytetään ASSERT:teja yms. Tässä esimerkin vuoksi virheiden palautuksesta. EFAULT on standardikirjaston virhekoodi, bad address, invalid pointer, yms. */
*summa = luku1 + luku2;
*vahennys = luku1 - luku2;
return 0; /* 0 = ei virhettä */
}

int main()
{
int summa, vahennys;
if(funktio(5, 3, &summa, &vahennys)==0)
printf("summa=%d vahennys=%d\n", summa, vahennys);
return 0;
}

Äänestä
  • Eikös siis tartte return lausekkeella palauttaa noita arvoja vaan ne menee jo tuossa: *summa = luku1 luku2; *vahennys = luku1 - luku2;

    (Tai siis onhan tuossa tuo return 0;)

    Äänestä

  • gsssdf kirjoitti:

    Eikös siis tartte return lausekkeella palauttaa noita arvoja vaan ne menee jo tuossa: *summa = luku1 luku2; *vahennys = luku1 - luku2;

    (Tai siis onhan tuossa tuo return 0;)

    Jep ehdinkin testata tätä asiaa ja tein itse tällaisen

    #include
    #include

    int funktio(int luku1, int luku2, int *summa, int *vahennys);

    int main()
    {
    int summa, vahennys;
    int luku1=5;
    int luku2=2;

    funktio( luku1, luku2, &summa, &vahennys);

    printf("summa=%d vahennys=%d\n", summa, vahennys);

    getche();
    return 0;
    }

    int funktio(int luku1, int luku2, int *summa, int *vahennys)
    {

    *summa = luku1 + luku2;
    *vahennys = luku1 - luku2;

    return 0; /* 0 = ei virhettä */
    }


    Kiitoksia neuvoista, pääsin ehkä jyvälle asiasta.

    Äänestä

  • aloittelija ohjelmoija kirjoitti:

    Jep ehdinkin testata tätä asiaa ja tein itse tällaisen

    #include
    #include

    int funktio(int luku1, int luku2, int *summa, int *vahennys);

    int main()
    {
    int summa, vahennys;
    int luku1=5;
    int luku2=2;

    funktio( luku1, luku2, &summa, &vahennys);

    printf("summa=%d vahennys=%d\n", summa, vahennys);

    getche();
    return 0;
    }

    int funktio(int luku1, int luku2, int *summa, int *vahennys)
    {

    *summa = luku1 + luku2;
    *vahennys = luku1 - luku2;

    return 0; /* 0 = ei virhettä */
    }


    Kiitoksia neuvoista, pääsin ehkä jyvälle asiasta.

    siis include stdio ja conio

    Äänestä

Kommentoi aloitusta


aloittelija ohjelmoija kirjoitti:

Aliohjelma laskeskelee useampia asioita... Miten aliohjelmasta palautetaan useampia tietoja (paluuarvoja)?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu