Heim >Backend-Entwicklung >C++ >Wie kann ich Funktionszeiger in C mit „cout' korrekt drucken?

Wie kann ich Funktionszeiger in C mit „cout' korrekt drucken?

Susan Sarandon
Susan SarandonOriginal
2024-12-30 02:07:09460Durchsuche

How Can I Correctly Print Function Pointers in C   using `cout`?

Funktionszeiger mit cout drucken

In C kann das direkte Drucken von Funktionszeigern mit cout problematisch sein. Stattdessen empfiehlt es sich, den Funktionszeiger vor dem Drucken in void* umzuwandeln. Dies wird im folgenden Codeausschnitt demonstriert:

#include <iostream>
using namespace std;

int foo() {return 0;}

int main()
{
    int (*pf)();
    pf = foo;
    cout << "cout << pf is " << pf << endl;
    cout << "cout << (void *)pf is " << (void *)pf << endl;
    printf("printf(\"%p\", pf) is %p\n", pf);
    return 0;
}

Ausgabe:

cout << pf is 1  
cout << (void *)pf is 0x100000b0c  
printf("%p", pf) is 0x100000b0c

Wie oben gesehen, konvertiert cout den Funktionszeiger implizit in bool, was zur Ausgabe 1 führt. Zum Ausdrucken die tatsächliche Adresse der Funktion, sie muss in void* umgewandelt werden.

Funktionszeiger vom Typ void* können direkt mit gedruckt werden cout. Dies liegt daran, dass void* ein generischer Zeigertyp ist, der die Adresse jedes Typs, einschließlich Funktionszeigern, enthalten kann.

Member-Funktionszeiger beobachten

Member-Funktionszeiger drucken mit void* funktioniert aufgrund ihrer komplexeren Struktur nicht. Gemäß dem C-Standard können R-Werte von Funktionszeigern jedoch in Bool konvertiert werden.

Das obige ist der detaillierte Inhalt vonWie kann ich Funktionszeiger in C mit „cout' korrekt drucken?. 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