Som sagt er en pointer bare en adresse. Den peger i praksis på en byte et sted i hukommelsen (ikke din normale hukommelse, men en virtuel hukommelse, som Windows har tildelt dit program), ikke andet. 4 bytes kan udgøre en float ligesom en long (som er det samme som en int på 32-bit cpu'er), og når du skriver float *f, så peger f på den første byte i floating point tallet.
De 4 bytes kan sagtens indeholde alt muligt andet, men det er stadig kun 4 bytes.
Derfor kan dette godt kompileres:
float f = 3.f; // f = 2.9999e-11 eller noget i den stil
long i = (int)f; // i = 3
float f = 3.f;
float *x = &f; // *x = 3.f
long *i = (long *)&f; // *i = (har ikke tjekket, men det er ikke 3) -1244353456
I det første eksempel konverterer jeg en float til long, hvilket bare runder ned / skal runde ned, ifølge den seneste C++ standard (ISO99 så vidt jeg husker). Jeg tror at det er en del af standarden, men er ikke helt sikker.
I det andet eksempel vil variablen i bare pege på 4 bytes, der officielt indeholder data i floating point format, som jo altså er et andet tal i heltals format. Men da 4 bytes er 4 bytes, så vil compileren tro at det officielt er et heltal, da vi fortæller den det ved at lave en type-casting (long *).
Håber du forstår hvor jeg vil hen med dette indlæg. Ellers må du da godt spørge igen
1101110100010110000101000001
[Redigeret d. 10/02-05 16:18:36 af Nicolai Lyster Fersner]