Van valami olvasmány amit elolvashatnék, hogy jobban megértsem a pointerek működését C-ben?
"A számítógép memóriájának rekeszei, bájtjai meg vannak számozva. A processzor, amikor szeretne egy változóban tárolt értéket kiolvasni, vagy szeretné módosítani azt, akkor a változó helyét jelző memóriacím (memory address) segítségével hivatkozza meg. Innen tudja a memória, hogy melyik tárolt bájtot kell előszednie, vagy hogy hova tegye a megjegyzendő adatot.
Amikor pointereket használunk a programunkban, tulajdonképp ezekkel a címekkel dolgozunk. A pointer belső ábrázolása egyszerűen a memóriacím."
Esettanulmány a pointer castoláshoz (#18-ra direkt válasz), ez szerintem a kérdezőnek is hasznos lehet (és amúgy javaslom az ilyen jellegű kísérletezést, főleg, ha valami nem világos):
#include <stdio.h>
int main(int argc, int argv[]) {
// Pointer cast
double a = 4.3;
double* p = &a;
int* pint = (int*)p;
double* pp = (double*)pint;
printf("Pointer cast: %f\n", *pp);
// Value cast
int aint = (int)a;
double aa = (double)aint;
printf("Value cast: %f\n", aa);
return 0;
}
Jó gyakorlat megtippelni, hogy mit fog kiírni a program, de azért itt hagyom:
Pointer cast: 4.300000
Value cast: 4.000000
Mi erre a magyarázat? Az első esetben a pointert castoltuk - NEM a mögötte levő adatot -, míg a második esetben az adatot castoltuk. Ami ugye double -> int lépésnél információt veszít, amit az utána következő int -> double nyilván nem tud visszaállítani. Ez nem lép fel a pointer castolásnál.
Sorszámot castolni. Na, az nem semmi.
Tombol az idiotizmus. :(
24
Nem. Azt a változót castolni, ami tárolja a sorszámot (pointer).
Amúgy a pointerek castolása elég gyakori C-ben (főleg, pl. void*-ról arra, ami neked kell)
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!