Új hozzászólás Aktív témák
-
maestro87
őstag
válasz jattila48 #5475 üzenetére
Köszi a kimerítő választ majd átrágom rajta magam.
Egyébként még azt találtam a printf-fel kapcsolatban (ha netán másnak is szüksége lenne rá), hogy az unsigned short long-ot nem támogatja, mert nem szabványos típus. Így a következő trükkel lehet kiírni:
unsigned short long valtozo = 16777215;
printf("unsigned short long: %lu", (unsigned long)valtozo); -
dobragab
addikt
válasz jattila48 #5574 üzenetére
Jól mondod.
Az egyszerűség kedvéért úgy is lehet definiálni, hogy a tömbön mint típuson két művelet értelmezett:
- sizeof
- automatikus konverzió, ami a tömb első elemére mutató pointerré konvertáljaEbből minden más, tömbökre jellemző tulajdonság levezethető:
- indexelni is "csak" a pointert tudjuk, az indexelés meg ugye ekvivalens egy címszámítással és egy dereferálással
- a tomb + 5 kifejezés nem azt jelenti, hogy a tömbhöz adunk ötöt, hanem az elejére mutató pointerhez, azaz a tömb ötödik elemére mutató pointert jelenti
- *tomb egy dereferálás, mégpedig a tömb első elemét jelenti
- a címét nem képezhetjük, hiszen ahhoz először pointerré konvertálódik, az így keletkezett temporális objektumnak nem képezhető a címe
- tömbnek nem adhatunk értéket, hiszen a konverzió eredménye temporális objektum, ami C-ben nem balérték
- függvényparaméterként csak úgy adhatjuk át, hogy előtte pointerré konvertálódik
- ha struktúrába rakod, a neki lefoglalt hely természetesen sizeof(tomb) lesz[ Szerkesztve ]
Tudom, tudom, akasszak a tökömre egy lámpát, hogy sötétben is tudjak kaszálni.
-
Gyb001
senior tag
válasz jattila48 #5777 üzenetére
Köszönöm a választ.
Igen, rátapintottál a lényegre, eléggé hadilábon állok a c-vel. De valahol el kell kezdenem.
Linux Fstab-ját szeretném dekódolni, egy struktúrába,
A tömbindex túllépést már kiküszöböltem. Hozzászoktam hogy az eclipse egyből sír ilyenkor.if(tmp == '#') boole=1;
if(boole==1 && tmp!='\n') continue;
if(boole==1 && tmp=='\n') {boole=0; continue;}[ Szerkesztve ]
A bus station is where a bus stops. A train station is where a train stops. On my desk, I have a work station
-
-
kovisoft
őstag
válasz jattila48 #6033 üzenetére
Ha pia egy másik függvényben van, akkor ott nem látod az eredeti tömböket. Lehet pl. pia egy függvény paramétere, és fontos, hogy szigorúan egy adott méretű tömb legyen neki átadva.
Egyébként ha ez most már arra megy ki, hogy hogyan lehet elkerülni tömbre mutató pointer használatát, arra én is tudok módszereket mondani, ilyen vitában nem kívánok részt venni. De eredetileg mintha azt kérdezted volna, hogy mire lehet használni. Továbbra is az a válaszom, hogy olyan esetben, amikor számít a megcímzett tömb sizeof-ja.
-
jattila48
aktív tag
válasz jattila48 #6035 üzenetére
Közben rájöttem, mikor van értelme a tömbre mutató pointer használatának.
int iia[10][5];
int (*piia)[5];
piia=iia;
Az iia kétdimenziós tömb neve önmagában leírva nem int ** típusú, hanem int (*)[5] típusú. Ezért ha ezt a kétdimenziós tömböt akarjuk átadni az f fv.-nek, akkorvoid f(int (*x)[5]);
prototípusúnak kell lennie.„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
kovisoft
őstag
válasz jattila48 #6041 üzenetére
Egy 6x6-os rács esetén 9 db lyuknak kell lennie, amiknek úgy kell elhelyezkedniük, hogy 90 fokokkal elforgatva ne kerüljön egyik lyuk sem fedésbe bármely másikkal. Tehát minden egyes lyuk hozzáadása kizár (saját magával együtt) 4 pozíciót. Az első lyuk 36 helyen lehet, a következők 32, 28, ... stb. helyen, ami összesen 36*32*28*...*4*1. Viszont a lyukasztási sorrend nem számít, ugyanazt a rácsot kapjuk, bármilyen sorrendben lyukasztjuk ki a kiválasztott 9 pozíciót. Tehát az össz kombinációt el kell osztanunk 9!-sal: 36*32*28*...*4*1/9! = 262144.
Már ha jó a gondolatmenetem...
-
pmonitor
aktív tag
válasz jattila48 #6211 üzenetére
Látom, hogy hozzászólásonként válaszolsz. #6181-ben leírtam, hogy nevemfel #6179-ben lévő megoldása a legjobb arra a feladatra(nem az enyém).
#6184-ben Stroustrup-ot idéztem, aki azt írta, hogy:
>A "soha ne tegyük ezt" alakú szabályokat haszontalannak tekintem.
A #6190-ben idéztem László Józsefet:
>A goto utasítást a Pascal-ban nem használjuk, mert ugye programozók vagyunk.
Majd a #6197-ben innen is idéztem 2 programnyelvtől független idézetet.A véleményem a #6209-ben foglaltam össze. A goto-cimke párossal összevissza lehet ugrálni, áttekinthetetlen lesz a kód tőle. Ha cimkét látsz, akkor egyrészt nem tudod, hogy fentről, vagy lentről tévedt oda a vezérlés. De azt sem tudod ránézésre, hogy amik utána vannak utasítások, azok micsodák(pl. a cimke 1 ciklus kezdetét jelzi-e, vagy egy - vagy több - if ágból ugrottak-e oda). Ugyanakkor, ha goto-t látsz, akkor sem tudod, hogy az a cimke felfelé, vagy lefelé ugrik-e. Az összevissza ugrálás lehetősége miatt mondom én azt, hogy a goto - cimke párost soha! Míg ha azt látod, hogy
while(f)
, akkor totózás nélkül, kapásból tudod, hogy mi következik(1 cimkével ellentétben).Én ugyan nem vagyok programozó, de remélem, hogy az ELTE-n(is) vaskalaposan ragaszkodnak a struktúrált programíráshoz, és tiltják a goto-t azokban a nyelvekben is, amelyekben még létezik. Mert ahogy a fenti linkemen is írják:
>a mai magasszintű nyelvekbe azonban többnyire hagyománytiszteletből került be, nincs rá szükség. (mármint a goto-ra).[ Szerkesztve ]
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
pmonitor
aktív tag
válasz jattila48 #6216 üzenetére
>A hozzászólásaidból az jön le, hogy kezdő vagy a programozásban (ez persze egyáltalán nem baj), és nem írtál még igazán nagyobb programot.
Nem kezdő vagyok, hanem egyszerűen nem vagyok programozó, ez miatt kezdő sem.
Az előéletem megnézheted itt, ahol azért 1-2 kérdésre válaszoltam.De ha a referenciáim érdekelnek, akkor többek között ezek, valamint ezek, továbbá ezek a publikus kódjaim, amelyek között van nagyobb is(persze relatív, hogy mi az az igazán nagyobb program?).
Neked mik a referenciáid/publikus kódjaid?
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
pmonitor
aktív tag
válasz jattila48 #6218 üzenetére
Nem sértődtem meg. Nézzünk 1 nagyobb projektet. Ezt remélem elfogadod 1 nagyobb projektnek. Itt a 300. sortól ez van(csak a szerkezetet mutatom):
if (raw)
goto out;
switch (token->type)
{
.
.
}
out:
timevar_pop (TV_LEX);Ezt miért nem lehet így:
if (!raw)
{
switch (token->type)
{
.
.
}
}
timevar_pop (TV_LEX);??
A nagy projekt is lépésekből épül fel.
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
buherton
őstag
válasz jattila48 #6331 üzenetére
A másik függvény a struktúrát nem inicializálta, hanem csak olvasta. Így történhetett meg ez a csodás hiba. Ez gyakorlatilag egy értékadás volt .
A többire. Amit nem javítottam ott tényleg sok mindent kellett volna átírni. Erre már nem volt idő. Egyébként igazad van elméletben. Én még ezzel a mentalitásommal - mármint hogy a feladathoz nem kapcsolódó hibákat javítsak - még ki is lógok a többiek közül. Ebbe és több más dologba is beleállok.
Nem tudok többet hozzáfűzni, mint amit dabadab írt.
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
alapz@j
tag
válasz jattila48 #6331 üzenetére
Ezt írtam rá tegnap:
void t1(void) {
char msg[16];
strcpy(msg, "Hello!");
puts(msg);
}
void t2(void) {
char msg[16];
puts(msg);
}
int main(void) {
t1();
t2();
return EXIT_SUCCESS;
}Mivel a t1 és t2 függvényeknek ugyanolyan méretű a kezdeti stack frame-je, így a t2 hívásakor a char[16] ugyanarra a memóriaterületre esik és a puts szépen kiírja az előző függvényből ott maradt Hello!-t
-
sztanozs
veterán
válasz jattila48 #6347 üzenetére
Úgy maradhat benne, hogy ahhoz, pl hogy egy eljárásban keletkező átmeneti változót visszaadjon (mert pár év után valaki rájött, hogy az is milyen jól jöhet máshol), változtatni kell az eljárás szignatúráját, ami viszont a kód más részeiben igényel újraírást. Ezt megspórolandó az új kód inkább turkál a (memória-) szemétben. Time is money.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Kés topik
- Elkaszálhatja az Apple az iPhone Plust
- Azonnali mobilos kérdések órája
- Sokat fogyaszt az AI, egyre több az adatközpont, kell az atomenergia
- Kerékpárosok, bringások ide!
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- Call of Duty: Mobile
- Horgász topik
- A Keychron ismét egy űr betöltését vállalta magára az egerek szegmensében
- Nothing Phone (2) - több, mint elsőre látszik
- További aktív témák...
- Yoga Slim 7 Pro 16IAH7 16" QHD+ IPS érintő i7-12700H Intel Arc A370M 32GB 1TB NVMe IR kam gar
- Canon EOS 5D Mark II + Canon EF 50mm f/1.4 USM
- Zotac RTX 3060 12GB GDDR6 GAMING Twin Edge Eladó! 83.000.-
- Zbook Power 15 G8 15.6" FHD IPS i7-11850H RTX A2000 32GB 512GB NVMe IR kam gar
- ThinkPad X13 Gen 4 13.3" FHD+ IPS i5-1345U 16GB 512GB NVMe ujjlolv IR kam gar
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen