[elektro] C18 kérdés
potyo
potyo.ada at gmail.com
Fri Oct 11 19:06:55 CEST 2013
az attól függ, mit akarsz :-))
de inkább
x=*(unsigned int *)&tomb[0];
Kell a csillag a zárójel elél, hogy az értéket kapd vissza a memóriacímről.
Csillag nélkül a tomb[0] memóriacíme kerülne az x változóba.
2013. október 11. 19:01 Skandar Graun írta, <sgraun at gmail.com>:
> Akkor ez így is jó lenne?
>
> x = (unsigned int *)&tomb[0];
>
>
> 2013. október 11. 0:46 potyo írta, <potyo.ada at gmail.com>:
>
> > 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.
> > -----------------------------------------
> > elektro[-flame|-etc]
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list