Heim >Backend-Entwicklung >C++ >Wie drucke ich Funktionszeiger in C mit „cout' und „printf'?

Wie drucke ich Funktionszeiger in C mit „cout' und „printf'?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-27 22:33:11279Durchsuche

How Do I Print Function Pointers in C   Using `cout` and `printf`?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn