( locsemege | 2024. 04. 20., szo – 15:00 )

A tömb az a memóriában lefoglalt terület, de nem adod át a stack-en, nem memcopy-zol, mert vinné a futásidőt és zabálná a stack-et. Bár jobban belegondolva szerintem struktúrát át lehet adni, abban meg tömböt is, csak eléggé nagy butaság, irgalmatlan lassú lesz. Pointert szoktunk átadni, de az nem visz magával más tulajdonságot, például elemszámot. De az elemszám ingoványos, ha a pointer történetesen nem a tömb nulladik elemére mutat. Amúgy típust sem visz magával, csak van egy olyan jó szokásunk, hogy olyan típusú pointert deklarálunk, amilyen típusú tömbön dolgozni akarunk, de ez nincs szükségképpen így. Viszont senki sem akadályoz meg abban, hogy deklarálj egy struktúrát, amelynek egyik eleme egy pointer, a másik egy elemszám, majd ezt a struktúrát add át a függvényednek. A C-ben épp az a jó, hogy ezt is meg lehet csinálni, de nem muszáj. Alkotói szabadságodban áll.

Mondvacsinált ez a sizeof probléma. Olyan ez, mintha létrehozna valaki egy void fnc() függvényt, majd utána azon nyafogna, hogy nincs visszatérési érték. Na jó, de ha úgy hozta volna létre, hogy legyen, akkor van visszatérési érték.

Ugye, az sem mindegy, hogy

stuct {
  char *name;
}

vagy

struct {
  char name[32];
}

módon hozunk létre egy típust. Előbbiben egy pointer mutat a bárhol lévő bármilyen hosszú stringre, míg utóbbi esetben a változó ténylegesen tartalmazza majd a legfeljebb 31 karakter hosszú stringet.

Meg ugye a printf("%s speed\n", flags.speed ? "Low" : "High"); esetében sem adtuk át paraméterül egyik stringet sem. Mindhárom string valahol, jó messze lesz a memóriában, s a rájuk mutató pointer kerül átadásra.