C programozási feladat - hogyan?
Programozási alapismeretek vizsgára készülök, és többször is találkozok efféle kérdésekkel: [link]
Valaki emberi nyelven el tudná magyarázni, hogyan is jön ki ez a megoldás? Kétségbe vagyok esve.
Előre is nagyon szépen köszönöm, és további szép hétvégét kívánok!
" Mi jön ki?"
A kedves kérdező valószínűsítem a megoldókulcsra gondolt Aminek az első "fele" szerintem hibás, legalábbis gcc 4.6.3-as fordítóval én más eredményt kaptam, és szerintem logikailag is az - mármint a gcc által fordított eredmény - tűnik helyesnek.
Na, akkor essünk neki.
Az első hívás, az f(a).
Ez az "a" nevű kétdimenziós tömböt adja át az f függvénynek. A tanárod, vagy nem tudom ki írta a feladatot, nincs igazán tisztában a működéssel, ezért is rossz a megoldásban az első karakter. A függvény lokális változójának a típusa nem char**, hanem (char*)[8]. Így amikor ezt inkrementálod, akkor a kétdimenziós tömbödben egy "sort" ugrasz előre, 8 charnyi helyet.
A **t valóban működik, és elér egy karaktert, olyan, mintha t[0][0]-t indexelnél. A feladat írójának szerencséje, hogy a {} alapból nullára tölti fel a tömbelemeket (legalábbis most ez jött le a dologból, de javítsatok ki), különben kapnál egy jó kis access violationt.
Tehát a t-t addig inkrementálja (8-asával, tehát egy sort ugrasz), amíg a **t (alias t[0][0]), a sor első eleme FALSE, tehát a null karakter. Ő azt hitte, hogy az ötödik sor végéig megy majd (látod, ott egy aposztróf nélküli NULL char), és a következő a + lesz. Ehelyett a nyolcadik sorig megy, mert annak az első eleme NULL. Aztán a while után még egy t++, ez már a kilencedik sor lesz, aminek kiírajta az első elemét (a).
Második hívás.
Röviden a g függvény kap egy 2D char tömböt, egy 1D char tömböt, és egy intet.
Az 1D tömb i-edik elemébe pakolja a 2D tömb i-edik SORÁNAK hatodik(ötös indexű) elemét.
Van benne egy rekurzív hívás (<6), mivel nullával kezdünk, ezért 0-5-ig megy az i, mint egy ciklus, csak jó bekavarós. a+4-el kezdünk, mint 2D tömb, így annak is a 0,5,6,7 kezdetű sorával.
Abban az hatodik elem a 9, így sorban megkapod az "alatta" lévőket, viszont van egy csupa NULL sorod, így az lesz a string vége.
Tehát az első kiírás egy 'a' karakter, a második kiírás pedig az "9<!\0" string.
Ugye a 0 nem látszik, viszont az nem az a NULL, amit a g függvény belepakol, csak mondom.
Első híváshoz egy kis segítség.
(remélem érted, mert elfáradt a kezem..)
Kapcsolódó 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!