Also habe ich den folgenden (sehr einfachen) Code:
%Vor%Also hier ist, was ich denke Ich mache (ich habe gelernt, dass ich in C ++ selten mache was ich denke, was ich tue):
Stimmt das alles?
Ihre zweite Aussage ist falsch. Sie reservieren ein neues int aus dem Heap. Die Kompilierzeitkonstante "32" hat keine Adresse und kann daher nicht übernommen werden. Sie erstellen ein int, dessen Wert 32 ist. Das ist nicht das Gleiche.
%Vor%pInt1 und pInt2 sind nicht gleich.
Oh, eine letzte Sache - C ++ ist eine ziemlich stark typisierte Sprache, und es ist ziemlich unnötig, Variablennamen mit Typdaten zu versehen. Dies wird ungarische Notation genannt, ist in Microsoft C-Bibliotheken und Samples sehr üblich, aber in der Regel nicht notwendig.
std::cout<< pInt << std::endl; //statement A
std::cout<< *pInt << std::endl; //statement B, which should print 32
std::cout << &pInt << std::endl; //statement C
Statement B gibt den Wert des Objekts aus, auf das pInt zeigt. Es zeigt auf ein int mit dem Wert 32, also druckt es 32.
Die Anweisungen A und C sind nicht definiert. Das zu druckende Objekt ist in beiden Fällen ein Zeiger, der auf Maschinenebene eine Speicheradresse ist. Die meisten Compiler drucken eine Hexadezimalzahl, obwohl es keine Garantie dafür gibt. Der Wert hängt auch davon ab, wo die Objekte gespeichert sind. Zum Beispiel, g ++ in 32-Bit-Windows Vista auf meinem Computer druckt:
%Vor%Borland druckt:
%Vor%Visual C ++ druckt
%Vor%Sie werden wahrscheinlich unterschiedliche Ergebnisse erhalten. Die erste Zahl ist die Adresse, die von new host () vom Heapspeicher zugewiesen und in pInt gespeichert wird. Es hat ein 4-Byte-Array zugewiesen, dort die Nummer 32 gespeichert und die Adresse in pInt gespeichert. Die zweite Zahl ist der gespeicherte Wert, interpretiert als int. Die dritte Zahl ist die Adresse (auf dem Stapel) von pInt.