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
Freigeben: 2024-12-27 22:33:11
Original
213 Leute haben es durchsucht

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;
Nach dem Login kopieren

printf-Funktion

Bei Verwendung von printf mit dem %p-Formatbezeichner Funktionszeiger werden als Zeiger behandelt und ihre Adressen werden hexadezimal ausgegeben:

printf("%p", pf);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage