( locsemege | 2024. 04. 20., szo – 14:12 )

A C olyan, hogy látnod kell magad előtt, mivé fordul, mi lenne ott a fordító szándéka, hogyan csinálnád assembly-ben. Nekem a pascalos viselkedés a furcsa a példádban. Félnék olyan nyelvtől, amelyben ez így van, mert nem értem, hogyan csinálja meg.

C-ben világos, hogy amikor átadtad a tömbre mutató pointert a függvénynek, fogalma sem lesz róla futásidőben, hogy a pointer mire mutat. Olyannyira nem, hogy C-ben nem kell a tömböd elejére mutatni a pointernek, meghívhatod így is:

func(arr + 5);

És akkor mit mondjon erre egy békés sizeof? Ott az csak egy pointer, ami 64 bit, az meg 8 byte, így természetesen 8-at ad vissza. Fogalma sincs func()-nak arról, hogy amivel hívod, az egy milyen hosszúságú micsoda, egyáltalán azonos típusú tömb-e, vagy cast-oltál, vagy belemutatsz a tömb belsejébe, vagy olyan címre mutatsz, amely nem is tartozik a processhez, és segfault lesz belőle. Mert az is lehet. Egyedül a NULL-ra tudsz vizsgálni. :) Szóval ezt a hívó helyen kell tudni, vagy a hívott függvénynek elmesélni, mennyi adaton garázdálkodhat a függvény.