Frage zu Code / Pointer
-
Hallo,
ich will folgenden code verstehen:static void buttons_isr( void* context, alt_u32 id ) { volatile int *function = (volatile int*) context; *function = IORD_ALTERA_AVALON_PIO_EDGE_CAP( BUTTONS_BASE ); IOWR_ALTERA_AVALON_PIO_EDGE_CAP( BUTTONS_BASE, 0 ); IOWR_ALTERA_AVALON_PIO_IRQ_MASK( BUTTONS_BASE, 0xF ); }
es wird eine funktion deklariert mit 2 variablen
- pointer context der void ist
- id die alt_u32 ist
in der funktion wird ein weitere pointer initialisiert welchem context zugewiesen wird (als int gecastet)
sehe ich das richtig??Dazu meine Frage:
warum wird context als void initialisiert? als int wäre doch viel logischer?
wozu der 2. pointer funktion? ich kann doch auch direkt*context = IORD_ALTERA_AVALON_PIO_EDGE_CAP( BUTTONS_BASE );
schrieben?
Danke schon mal
-
Hallo,
goaran schrieb:
warum wird context als void initialisiert?
Damit der Aufrufer einen Zeiger auf einen beliebigen Typen übergeben kann.
goaran schrieb:
wozu der 2. pointer funktion? ich kann doch auch direkt
*context = IORD_ALTERA_AVALON_PIO_EDGE_CAP( BUTTONS_BASE );
schrieben?
Das geht nicht, weil sich ein Zeiger auf void nicht dereferenzieren lässt.
Gruß,
B.B.
-
Soche Konstrukte werden in C häufig verwendet um generisch programmieren zu können.
Irgendwelche zwischenschichten müssen nicht wissen was sich hinter dem void* verbirgt.
z.B. ein generischer container myList hält intern nur einen void*.
Beim reinstecken kenn ich den Typ,
bei rauslesen muss ich casten um drauf zugreifen zu können.Ich hoffe das war einigermaßen verständlich.
Gruß Frank