Aliohjelma laskeskelee useampia asioita... Miten aliohjelmasta palautetaan useampia tietoja (paluuarvoja)?
Miten palauttaa aliohjelmasta useampi tieto
4
420
Vastaukset
- ..
... 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;
}- gsssdf
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;) - aloittelija ohjelmoija
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. - aloittelija ohjelmoija
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
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Aivosyöpää sairastava Olga Temonen TV:ssä - Viimeinen Perjantai-keskusteluohjelma ulos
Näyttelijä-yrittäjä Olga Temonen sairastaa neljännen asteen glioomaa eli aivosyöpää, jota ei ole mahdollista leikata. Hä912900Pelotelkaa niin paljon kuin sielu sietää.
Mutta ei mene perille asti. Miksi Venäjä hyökkäisi Suomeen? No, tottahan se tietenkin on jos Suomi joka ei ole edes soda2991686Mikä saa ihmisen tekemään tällaista?
Onko se huomatuksi tulemisen tarve tosiaan niin iso tarve, että nuoruuttaan ja tietämättömyyttään pilataan loppuelämä?2461557- 871391
IL - VARUSMIEHIÄ lähetetään jatkossa NATO-tehtäviin ulkomaille!
Suomen puolustuksen uudet linjaukset: Varusmiehiä suunnitellaan Nato-tehtäviin Puolustusministeri Antti Häkkänen esittel4021374Nyt kun Pride on ohi 3.0
Edelliset kaksi ketjua tuli täyteen. Pidetään siis edelleen tämä asia esillä. Raamattu opettaa johdonmukaisesti, että3981292Kiitos nainen
Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik21079Esko Eerikäinen tatuoi kasvoihinsa rakkaan nimen - Kärkäs kommentti "Ritvasta" lävähti somessa
Ohhoh! Esko Eerikäinen on ottanut uuden tatuoinnin. Kyseessä ei ole mikä tahansa kuva minne tahansa, vaan Eerikäisen tat381037Hyväksytkö sinä sen että päättäjämme ei rakenna rauhaa Venäjän kanssa?
Vielä kun sota ehkäpä voitaisiin välttää rauhanponnisteluilla niin millä verukkeella voidaan sanoa että on hyvä asia kun329874Miksi Purra-graffiti ei nyt olekkaan naisvihaa?
"Pohtikaapa reaktiota, jos vastaava graffiti olisi tehty Sanna Marinista", kysyy Tere Sammallahti. Helsingin Suvilahden257855