[elektro] C18 kérdés
potyo
potyo.ada at gmail.com
Fri Oct 11 00:46:09 CEST 2013
2013. október 11. 0:34 flaist írta, <flaist at gmail.com>:
> Sziasztok!
>
> Adott a következő adat mozgatás C18-ban.
>
> unsigned char tomb[12];
> unsigned int x; //C18-ban 2 byte-t jelent
>
> x = (unsigned int) tomb[0];
>
> Hibátlanul lefordul, de csak 1 byte-t másol, tomb[1]-t nem viszi át..
>
> Ez viszont jó lesz!
>
> x = (unsigned int)* (unsigned int *)&tomb[0];
>
> Nem értem az első mért nem jó?
>
> C18 hiba, vagy a jogos amit csinál?
Jogos. Az első esetben azt csinálod, hogy kiolvasod a tomb[0] tartalmát, és
magát az értéket castolod két bájtra. Mivel a tomb[0] csak egy bájtos,
ezért ezt az egy bájtos értéket másolja át az x változóba. Ez ugyanaz,
mintha azt írnád, hogy x=tomb[0];
A második eset viszont azért jó, mert a tomb[0] memóriacímét kiszeded, ezt
castolod, hogy ne egy, hanem két bájtos típusra mutatóként legyen
értelmezve a továbbiakban, majd dereferenciálod a mutatót, ami azt jelenti,
hogy kiolvasod a kétbájtos értéket az adott memóriacímtől kezdődően, majd
ezt castolod két bájtosra (ennek amúgy nincs jelentősége), és ezt az
értéket másolod be az x változóba.
More information about the Elektro
mailing list