Benennung?
-
Ich hab eine Klasse gegeben:
class irgendwas { }; int main() { irgendwas *irgend; return 0; }In der main schreib ich ja irgendwas *irgend; Wie nennt man das was da passiert? Hier wird doch ein Pointer auf ein Objekt der Klasse irgendwas erzeugt, oder?
-
Mit
irgendwas *irgend;definierst du einen Zeiger, der auf eine Intanz von 'irgendwas' zeigen kann. Der Pointer ist allerdings nicht initialisiert, d.h. wenn du ihn dereferenzierst, dann erzeugt das UB.
-
vip@r schrieb:
Wie nennt man das was da passiert? Hier wird doch ein Pointer auf ein Objekt der Klasse irgendwas erzeugt, oder?
Du definierst (und deklarierst) eine Instanz eines integralen skalaren Basisdatentyps pointer (nenn' ich so), der eine Beliebige vorzeichenlose Ganzzahl beinhalten kann. Die Größe eines Pointers ist Plattformspezifisch; allerdings muss sie selbstverständlich jede Adresse im RAM beinhalten können, und ebenfalls mindestens so groß sein wie der Adressbus der CPU. Der Compiler nimmt übrigens bei jeder Pointer-spezifischen Operation (->, ->*,
an, dass dieser Pointer die Adresse einer irgendwas-Instanz enthält, deswegen ist es fatal (und ein Hauptgrund für Bugs
) einen uninitialisierten Pointer zu verwenden (also besser mindestens mit Null initialisieren, damit auch prüfbar ist ob der Pointer gültig ist oder nicht).
-
Sone schrieb:
allerdings muss sie selbstverständlich jede Adresse im RAM beinhalten können, und ebenfalls mindestens so groß sein wie der Adressbus der CPU.
nöp. Jetzt hast du so darauf geachtet alles richtig zu schreiben, und dann sowas Offensichtliches.
-
der eine Beliebige vorzeichenlose Ganzzahl beinhalten kann
Nur weil du den Inhalt von Speicher als Ganzzahl interpretierst, muss es noch lange keine sein.
allerdings muss sie selbstverständlich jede Adresse im RAM beinhalten können
Es ist schwierig, Adresse in diesem Zusammenhang zu definieren.
-
knivil schrieb:
der eine Beliebige vorzeichenlose Ganzzahl beinhalten kann
Nur weil du den Inhalt von Speicher als Ganzzahl interpretierst, muss es noch lange keine sein.
Ich meinte, dass du ihr eine positive Ganzzahl (natürlich begrenzter Größe, also kleiner als 2^sizeof(void*) * 8^) zuweisen kannst und keine Information verloren geht.
knivil schrieb:
Es ist schwierig, Adresse in diesem Zusammenhang zu definieren.
Damit meine ich jede logische Adresse, die die MMU in eine gültige physikalische umwandeln kann.
-
vip@r schrieb:
Wie nennt man das was da passiert?
Sone schrieb:
Du definierst (und deklarierst) eine Instanz eines integralen skalaren Basisdatentyps pointer (nenn' ich so), der eine Beliebige vorzeichenlose Ganzzahl beinhalten kann. Die Größe eines Pointers ist Plattformspezifisch; allerdings muss sie selbstverständlich jede Adresse im RAM beinhalten können, und ebenfalls mindestens so groß sein wie der Adressbus der CPU. Der Compiler nimmt übrigens bei jeder Pointer-spezifischen Operation (->, ->*,
an, dass dieser Pointer die Adresse einer irgendwas-Instanz enthält, deswegen ist es fatal (und ein Hauptgrund für Bugs
) einen uninitialisierten Pointer zu verwenden (also besser mindestens mit Null initialisieren, damit auch prüfbar ist ob der Pointer gültig ist oder nicht).Willst du mit Halbwissen prahlen oder Anfänger verwirren? Er hat gefragt wie man es nennt was er da macht. Wenn ich Frage wie Schokoladeneis schmeckt, erklärst du mir dann wie es gemacht wird?
-
FreakY<3Cpp schrieb:
vip@r schrieb:
Wie nennt man das was da passiert?
Sone schrieb:
Du definierst (und deklarierst) eine Instanz eines integralen skalaren Basisdatentyps pointer (nenn' ich so), der eine Beliebige vorzeichenlose Ganzzahl beinhalten kann. Die Größe eines Pointers ist Plattformspezifisch; allerdings muss sie selbstverständlich jede Adresse im RAM beinhalten können, und ebenfalls mindestens so groß sein wie der Adressbus der CPU. Der Compiler nimmt übrigens bei jeder Pointer-spezifischen Operation (->, ->*,
an, dass dieser Pointer die Adresse einer irgendwas-Instanz enthält, deswegen ist es fatal (und ein Hauptgrund für Bugs
) einen uninitialisierten Pointer zu verwenden (also besser mindestens mit Null initialisieren, damit auch prüfbar ist ob der Pointer gültig ist oder nicht).Willst du mit Halbwissen prahlen oder Anfänger verwirren? Er hat gefragt wie man es nennt was er da macht. Wenn ich Frage wie Schokoladeneis schmeckt, erklärst du mir dann wie es gemacht wird?
Das war doch nur aus Spaß. Seine Frage wurde doch schon längst beantwortet.
Mal abgesehen davon steht das in jedem (Edit: Damit du mich jetzt nicht damit nervst: C++-) Buch, man kann es googlen und braucht hier keinen Thread zu eröffnen.