Hogyan lehet egy tömb elemeit lekérdezni Cben?
A történet az, hogy nemrég kezdtem el ezt a nyelvet c++, Java... stb ismeretekkel, de valamiért úgy érzem hogy ennek a nyelvnek kicsit lyukas a története. Elég sok dolog hibádzik amikre a megoldás elég körülményes, de gondoltam letudom mert muszáj, de ha már egy tömb méretét se lehet lekérdezni benne akkor kész. próbáltam sizeof()-al de egy 5 elemű tömbnél 19elemet futtatott végig a cikluson és nem értem miért. Tudna valaki segíteni, hogy pl az int szamok[5]; tömb elemeinek számát milyen függvényel tudnám lekérdezni? És esetleg akkor már idecsapom azt a kérdést is ha már nem túl távoli a dolog, hogy pl egy olyan stringet, mint a char string[]="alma es korte"; karaktereinek dbszámát lekérdező függvény van e?
A válaszokat előre is köszi 33
A sizeof() bájtokban adja meg a lefoglalt memória méretet. Egy int 4 bájtos (32 bites), így az 5 elemű tömbre 20-at mondott neked (valójában 20 elemet futtattál le, 0-tól 19-ig).
Meglátásom szerint az alap tudásodban vannak a lyukak és emiatt gondolod, hogy a nyelvvel van a probléma.
Elég sok minden épül C-re, és azok többnyire jól is működnek. Persze érteni kell hozzá.
C-ben nincs lehetőséged lekézdezni egy tömb méretét - de erre nincs is szükség, hiszen te hoztad létre - a méret ismeretében. Ezért, amikor függvénynek adsz át végjelmentes tömböt, a méretét is át kell adni.
Az "alma es korte" literál mérete 14 bájt, mert a stringet lezáró nulla ('\0') is szükséges. Ezt keresi meg az strlen függvény (és az összes többi string függvény is).
A C nagyon alacsony szintű nyelv, úgyhogy készülj fel, hogy vért fogsz izzadni, főleg egy Java után.
Ha nem beágyazott rendszerekről van szó (ami nem ismer más nyelvet), vagy nem fontos a nagyon optimalizált kód, akkor nem is érdemes használni.
Ahogy az előttem szóló is mondta a C nagyon alacsony szintű nyelv.
Java-ban azért tudod lekérdezni egy tömb méretét mert az Array objektum tárolja azt, külön privát változóban. Ez egy teljesen más szemléletmód, a Java egy komoly szerszám nagy munkákra, ahol nem érdekel mi van a memóriában. A C pedig rendszer-közeli nyelv, azért várja el, hogy tisztában legyél a memóriád állapotával mert feltételezi, hogy valóban arra akarod használni amire való. C-ben nagyon komoly dolgokat meg lehet csinálni, drivereket és erőforrás takarékos alrendszereket, beágyazott rendszereket, firmware-eket lehet írni benne. Mint mindenhez ehhez is érteni kell.
Java után természetes, hogy nehézkesnek tűnik a C, de ne felejtsd el, hogy ez a szerszám egy másik munkára való, mint amire te használni szeretnéd.
> de gondoltam letudom mert muszáj
Meghalni muszáj. ha azért tanulod, hogy beírhasd a CV-dbe, akkor felesleges időpazarlás, ahol nem kel foglalkoznod vele, ott nem fogják nézni, ahol meg igen, ott nem lesz elég ha csak "letudod".
"C-ben nincs lehetőséged lekézdezni egy tömb méretét"
Dehát... pont erről szól a kérdés, hogy de. Mi az istenről beszélsz? Ja, hogy szerinted a pointer is tömb, és a tömb is pointer, tehát hamut mamuval keversz.
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!