parameter - pointer to object c++




Wie ist "int*ptr=int()" Wert Initialisierung nicht illegal? (4)

Der folgende Code ( von hier ):

int* ptr = int();

Kompiliert in Visual C ++ und value-initialisiert den Zeiger.

Wie ist das möglich? Ich meine int() ergibt ein Objekt vom Typ int und ich kann einem Zeiger keinen int zuweisen.

Wie ist der obige Code nicht illegal?


Der Ausdruck int() liefert eine konstante, standardmäßig initialisierte Ganzzahl, die den Wert 0 hat. Dieser Wert ist speziell: Er wird verwendet, um einen Zeiger auf den NULL-Zustand zu initialisieren.


Nun, Int ist kein Objekt.

Ich glaube, was hier passiert, ist, dass Sie dem Int * mitteilen, auf eine Speicheradresse zu zeigen, die durch int () bestimmt wird.

Wenn also int () 0 erzeugt, zeigt int * auf die Speicheradresse 0


Weil int() 0 ergibt, ist das mit NULL austauschbar. NULL selbst ist als 0 definiert, anders als NULL was (void *) 0 .

Beachten Sie, dass dies ein Fehler wäre:

int* ptr = int(5);

und das wird immer noch funktionieren:

int* ptr = int(0);

0 ist ein spezieller konstanter Wert und kann daher als ein Zeigerwert behandelt werden. Konstante Ausdrücke, die 0 ergeben, z. B. 1 - 1 sind auch als Nullzeiger-Konstanten zulässig.


int() ist ein konstanter Ausdruck mit einem Wert von 0, also ist es ein gültiger Weg, eine Nullzeigerkonstante zu erzeugen. Letztendlich ist es nur eine etwas andere Art zu sagen: int *ptr = NULL;







built-in-types