Das Snippet übergibt den Wert id
an eine Routine, die eine allgemeine void *
Struktur annimmt. Ich bin verwirrt, warum es funktioniert: Warum können Sie die long
zu void*
werfen und es mit einer long
zurückwerfen.Wert durch Zeiger auf void übergeben
Insbesondere dachte ich, wenn Sie mit Zeiger übergeben möchten, dann sollten Sie die Adresse der Variablen wie &id
an die test()
Funktion übergeben.
#include <stdio.h>
void test(void * id) {
long myid;
myid = (long) id;
printf("my id is %ld\n", myid);
}
int main() {
long id = 5;
test((void *)id);
}
Das ist nicht die richtige Art, den Wert von 'foo' zu drucken. Benutze 'printf ("% p ", (void *) foo);/* besser */'oder' printf ("% ld", (lang) foo);/* schlechter */' – user694733
Zeiger sind nicht" nur Zahlen ". In der Regel sind 8086 "far" -Zeiger zwei Zahlen. (Segment/Offset) – MSalters