void-Zeiger in der Funktion parameter

Betrachten Sie Folgendes Programm:

#include <iostream>
void f(void* a)
{
    std::cout<<"(void*)fun is called\n";
    std::cout<<*(int*)a<<'\n';
}
int main()
{
    int a=9;
    void* b=(int*)&a;
    f(b);
    return 0;
}

Wenn ich die Funktion call-Anweisung wie dieser:

f(&b);

Es noch kompiliert fein & stürzt zur Laufzeit. Warum? Was ist der Grund? Sollte ich nicht die compile-Zeit-Fehler? Da die richtige Art und Weise zum Aufruf der Funktion ist f(b). richtig? Auch, warum es zulässig ist, übergeben Sie den Wert NULL zu einer Funktion, deren parameter vom Typ (void*)?

Bitte korrigieren Sie mich Wenn ich bin fehlt etwas oder verstehen Sie etwas falsch.

Ein Zeiger ein Zeiger ist immer noch ein Zeiger, so ist es akzeptiert, als ein void*.
Sie meinte wohl passieren a's Adresse um das gleiche zu erreichen: f(&a);
Während EdHeals Kommentare sind nicht gerade nett, im Grunde hes Recht. Wenn Sie nicht verstehen, was dieser tut, nicht tun. Sie nicht sogar müssen alle Hinweise hier.

InformationsquelleAutor Destructor | 2015-06-20

Schreibe einen Kommentar