C# argumentumok?
Üdv, egy rekurzív metódust írtam, és arra figyeltem fel, hogy a
foo(int x, int szamlalo)
{
foo(3, szamlalo++);
}
nem növeli a szamlalo értékét, változatlan marad, míg:
foo(int x, int szamlalo)
{
foo(3,szamlalo + 1);
}
rendesen növeli. Miért van ez így? A metódus hívása után növelné egyel a szamlalo értékét, és ezért nem következik be?
Azért, mert ha szamlalo++ -t használsz, akkor szamlalo értékkel hívja meg a függvényt és utána növeli.
Használj inkább ++szamlalo -t. Az előbb növel, aztán értékelődik ki.
Két dolog van, amit érdemes itt tudni:
1. A szamlalo++ és a szamlalo + 1 nem ekvivalens kifejezések. Nézz utána a post increment és pre increment operátorok működésének.
2. Bár nem tartozik szorosan a kérdéshez, és lehet, hogy már tudod amúgyis, de a value type-ok érték szerint adódnak át, azaz, a függvény-hívás pillanatában egy másolat készül a szamlalo-ról, és az adódik át a függvények, így a hívó kontextusában nem fog semmilyen változást kiváltani, ha a fgv. belsejében változtatod. Csak azért írom le, hogy esetleges jövőbeni hibáktól megkíméld magad.
További kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!