a programegységek között Paraméterátadás a programegységek között
Programegység Szerkezete Hívása Eljárás* Eljárásnév(formális paraméterek listája) saját konstansok, változók deklarációja utasítások, eljárás-hívások Eljárás vége Hívása Eljárásnév(aktuális paraméterek listája) Változónév = Függvénynév(aktuális paraméterek listája) *Függvény Függvénynév(formális paraméterek listája): típus
Értékszerinti paraméterátadás Eljárás A (x: egész) … x=2 Eljárás vége A(5) Értékszerinti paraméterátadás Példa alapján A formális paraméter számára létrehoz egy új helyet a memóriában a megadott x névvel egész szám számára x Az x helyre bemásolja az aktuális paraméterként kapott értéket x=5 Az eljárásban x értéke olvasható és módosítható x=2 Az eljárás végén felszabadítja a memóriában x helyét x helye és értéke is megszűnik Az aktuális paraméter lehet: változó, konstans, kifejezés Hátránya a paraméternek újra helyet foglal a memóriában.
… static int maximum(int x, int y) { int z; if (x>y) z=x; else z=y; return(z); } static void Main() Console.WriteLine(maximum(4,3)); Pl.: C# Képernyőn: 4 static int maximum(int x, int y) ^ | visszatérési érték típusa
Címszerinti paraméterátadás Eljárás B (x: egész) … x=2 Eljárás vége Z=5 : B(Z) Címszerinti paraméterátadás Példa alapján Meghatározza Z memóriacímét, ezt adja át az eljárás formális paraméterének x címe = Z címe Az eljárásban x értéke olvasható és módosítható x=2 Az eljárás végén felszabadítja az x nevet, de nem szabadítja fel a helyet a memóriában Az eljáráson kívül a Z név él tovább Z=2 Az aktuális paraméter lehet: változó
… void csere(ref int x, ref int y) { int segéd=x; x=y; y=segéd; } static void Main() int a=5, b=6; Console.WriteLine(„Csere előtt: a,b:”,a,b); csere(ref a,ref b); Console.WriteLine(„Csere után: a,b:”,a,b); Pl.: C# Képernyőn: 5 6 6 5 ref (reference) Megíráskor is oda kell írni meghíváskor is oda kell írni Minden változó elé külön-külön
Eredményszerinti paraméterátadás Függvény C (…): egész … Függvény vége Ki: C(…) Eredményszerinti paraméterátadás Példa alapján Visszatérési érték számára létrehoz egy új helyet a memóriában, a típusa a visszatérési típus A függvény végén ez a memóriacím értéket kap A függvény végén visszaadja a keletkezett értéket majd felszabadítja a memóriában az érték helyét A visszatérési érték: értékül adható változónak, kiírható, kifejezésben felhasználható
Függvényeredmény paramétere – C# Amikor egy függvénnyel több értéket kell előállítani. a visszatérési érték mellett, a paraméterlistán jelezhető, hogy melyik paraméter értéke fog változni Címszerinti paraméterátadás
… public static int TesztKiiras(out char i) { i=‚B’; return -1; } public static void Main() char i; Console.WriteLine(TesztKiiras(out i)); Console.WriteLine(i); Pl.: C# Képernyőn: -1 B Több visszatérési érték esetén public static int TesztKiiras(out char i) ^ ^ | | return adja vissza változtatható
Mutató típus
Mutató típus algoritmusban Értékhalmaz A memória megengedett tartománybeli címe egy adott típusú objektumnak vagy Egy előre definiált „sehova” érték Definiálása Pl.: Egész’Mutató Műveletek Konstrukciós függvény: Pl.: Egész(M) M a memóriacímet határozza meg, ahol egy egész szám „fér el” a memóriában
Mutató típus algoritmusban Műveletek Létrehozás futási időben Pl.: Lefoglal(M) M a memóriacímtől egy egész számnyi helyet lefoglal a memóriában Pl.: Lefoglal(M,17) M a memóriacímtől egy egész számnyi helyet lefoglal a memóriában és feltölti a megadott értékkel (az érték kifejezés eredménye is lehet) Ha a helyfoglalás sikertelen, akkor M a „Sehova” címet kapja értékül
Mutató típus algoritmusban Műveletek Felszabadítás futási időben Pl.: Felszabadít(M) az M memóriacímet „Sehova” címre állítja, tehát az objektum a memóriában már nem elérhető Relációk = A mutató típusú változókkal nagyon óvatosan kell bánni, mert velük közvetlenül a memóriában végzünk műveleteket! A fejlesztői környezet nem tud a segítségünkre lenni. Ábrázolás A memóriacímnek megfelelő szélességű tartomány (2-4 bájt)