Funktionszeiger mit cout und printf drucken
In C können Funktionszeiger mit cout oder printf gedruckt werden, jedoch mit unterschiedlichem Verhalten je nach der verwendete Formatbezeichner.
cout Operator
Standardmäßig behandelt cout Funktionszeiger als boolesche Werte und gibt 1 für Nicht-Null-Zeiger und 0 für Null-Zeiger aus. Um die tatsächliche Adresse zu drucken, muss sie explizit in void* umgewandelt werden:
cout << (void *)pf;
printf-Funktion
Bei Verwendung von printf mit dem %p-Formatbezeichner Funktionszeiger werden als Zeiger behandelt und ihre Adressen werden hexadezimal ausgegeben:
printf("%p", pf);
Funktionszeiger als Boolesche Werte
Funktionszeiger werden in C tatsächlich als boolesche Werte behandelt. Dies liegt an der booleschen Konvertierungsregel, die es ermöglicht, Zeiger in boolesche Werte umzuwandeln, wobei ein Nicht-Null-Zeiger als wahr und ein Null-Zeiger als falsch ausgewertet wird. Dieses Verhalten kann unerwartet sein, wenn es nicht berücksichtigt wird.
Member-Funktionszeiger
Das Drucken von Member-Funktionszeigern ist komplexer, da es sich nicht um einfache Zeiger handelt. Es ist jedoch möglich, die Adresse der Mitgliedsfunktion mit einem Trick auszugeben:
cout << (void *)(*(int **)&pf);
Dabei macht man sich die Tatsache zunutze, dass die Adresse der Mitgliedsfunktion im zweiten Element des Funktionszeigers gespeichert und umgewandelt wird es wird ungültig*.
Das obige ist der detaillierte Inhalt vonWie drucke ich Funktionszeiger in C mit „cout' und „printf'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!