Kezdőoldal » Számítástechnika » Programozás » Ez egy C ben írt program és...

Ez egy C ben írt program és valaki el tudná magyarázni hogyan kell értelmezni a második sort: void putsUART2 (unsigned int *buffer) { char * temp_ptr = (char *) buffer; ?

Figyelt kérdés

2016. dec. 18. 21:27
 1/7 anonim ***** válasza:

csak c++t ismerem de:

nincs visszatérési értéke,

putsUART2 a methód neve

unsigned = csak potitív

buffer egy memóriaterület, így ha a blokkban ({}-belül) megváltoztatják az értékeét akkor máshol is megváltozik

és a blokkon belül:

temp változó legyen buffer változóval 1enlő (ami az input)


ptr = pointer = memória területre való hivatkozás ezt jelenti a * jel

2016. dec. 18. 21:38
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

hja intet kap inputként

a karakterek igazából egy karaktertábla indexelt karakterei, tehát minden karakternek van egy sorszáma, és ezt kapja meg és átalakítja karakterré talán de nem vagyok benne 100% biztos

2016. dec. 18. 21:40
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
Semmi értelme a vége nélkül.
2016. dec. 18. 21:48
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:

Köszönöm az eddigi válaszokat, a pointer működését értem.

Itt a pointer aritmetika lenne érdekes ami a második sorban van. Ez valami típus kényszerítéses megoldás, de nekem egyenlőre zavarosnak tűnik. Újra itt bemásolva:


char * temp_ptr = (char *) buffer;

2016. dec. 18. 22:12
 5/7 A kérdező kommentje:
Ja és az még világos hogy a függvény argumentumban egy unsigned int típusra mutató buffer nevű mutatót vesz át. Tehát tényleg csak a másik sor lenne érdekes.
2016. dec. 18. 22:15
 6/7 anonim ***** válasza:

A char C-ben mindig 1 bájt. Ez annyit csinál hogy felkészíti a metódust hogy felszeletelje a buffert bájtokra és majd bájtonként dolgozza fel és küldje el az adatot (ha már UART-ról van szó). A buffer int-re, azaz 2/4/8 bájtos adategységekre mutat, de a temp_ptr megkapja ugyan azt a címet úgy, hogy megpróbálja elhitetni a fordítóval hogy ott 1 bájtos egységek vannak és nem int-ek. A memória tartalma ugyan az marad, de így már bájonkét fogja kiolvasni, és nem 4 bájtonként pl.


Annyit hozzá fűznék a kódhoz hogy mivel az int mérete nem kötött, ha egyik architektúráról elküldjük az adatot UART-on keresztük egy másik architektúrára, az adat visszaállítása nem lesz egyértelmű., továbbá a bájt sorrend is architektúra függő amit nem ilyen "hackelős" pointer konverzióval szoktak feloldani hanem shift operátorral.

2016. dec. 18. 22:18
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:
Köszönöm a választ.
2016. dec. 18. 22:30

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!