Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Was ist an Pointervariablen so gut?!?

Ryo19m (Anonym) / 4 Antworten / Baumansicht Nickles

hy Leute!
Bin ein Interessierter Programmierer und habe mich schon in den verschiedensten Sprachen versucht.(Java, Perl, VisualBasic, DarkBasic, Delphi usw). Programmiere mir mitlerweile meine CGI\'s selbst und versuche mich hin und wieder an 3D Games(mit DarkBasic) und Appz(mit VisualBasic und Borland Delphi).

Nun ne Frage zu C++: Was ist an PointerVariablen besser, als an
normalen Variablen. Sie speichern immerhin die Speicheradresse des Wertes im Arbeitsspeicher, obwohl ich doch viel einfacher den wert wiedergeben kann, wenn ich es ohne Pointervariablen direckt von der jeweiligen Variable ziehen kann...

Meines erachtens ist die Methode zur speicherung von Werten mit Pointer viel unübersichtlicher! Vor allem bei der Analyse eines fremden Quellcodes. (Versuche manchmal krampfhaft den Wert zu suchen, der letztendlich an die Variable übergeben wurde.) Wäre mir zumindest wert zu erfahren, was es eigendlich bringt Pointers in seine Programmstruktur aufzunehmen...(schnellerer Datenzugriff?!?!?)

Wäre auch net, wenn sich jemand dafür breit schlagen könnte, mir über ein Chat (ICQ, IRC oder Mail möglich), durch eine Intensive Unterhaltung über C++, meine eventuellen Gedankenfehler auszumerzen (sofern ich welche hab). Habe 3 digitale Bücher mit insgesammt ca. 2500 Seiten Wissen über C++. DUrch das lesen, bin ich bei manchen Bereichen bei C++ ziemlich Verwirrt!

Thats for now
Please answear

bei Antwort benachrichtigen
(Anonym) Ryo19m (Anonym) „Was ist an Pointervariablen so gut?!?“
Optionen

Um es mal vereinfacht darzustellen, speichert man wie du es gerne möchtest, einen Wert A in den Variablen A1 B1 C1, so wird jeweils für alle drei Variablen eine Kopie des Wertes A erstellt, was auch dreimal den Speicherplatz von A verbraucht.

Möchte ich nun den Wert A in allen Variablen verändern, so muß man auf alle drei zugreifen (zeitkritisch).

Legt man sich aber statt den drei Variablen, drei Pointer an und übergibt diesen Drei die Speicheradresse von A, wird für A nur einmal Speicher verbraucht. Will man in einem Fall jetzt das sich A quasi in den drei PointerVariablen ändert, so braucht A nur an seiner Speicheradresse verändert werden, denn die Pointer in den Variablen zeigen ja alle auf diese Adresse!

Gerade wenn du 3D Games entwickelst, solltest du doch wissen wie wichtig es ist, keine zeitkritischen Routinen zu entwickeln.
Deswegen sind alle nennenswerten 3D Engines heute auch zu 80% in C++ mit ausgiebiger Pointeraritmethik entwickelt!
Oder vergleich mal den Speicherverbrauch zur Laufzeit eines in VB oder Delphi entwickelten Programms und eines was die gleiche Funktion erfüllt, in C++ mit Pointer Technik!

bei Antwort benachrichtigen
(Anonym) Ryo19m (Anonym) „Was ist an Pointervariablen so gut?!?“
Optionen

versuch mal dynamische Datenstrukturen nur mit Wertevariablen zu entwickeln!

bei Antwort benachrichtigen
Dreamforger Ryo19m (Anonym) „Was ist an Pointervariablen so gut?!?“
Optionen

Nachdem ich einige Programme direkt in Maschinensprache geschrieben habe ( nicht auf auf Intels - ganz beknackt bin ich auch nicht) habe ich mal einen direkten einblick gehabt warum Point so viel schneller sind:

Bei jedem Aufruf einer Function müssen alle Parameter auf den Stack (Eine spezielle Speicherregion) kopiert werden. Wenn du ein sehr großes Datenobject (struct, class....) übergibst muss das alles auf den Stack kopiert werden, Und bei mehreren kb "dauert" das dann schon.
Im gegensatz dazu sind Pointer nur 8 Byte(oder warns 4?) groß, unabhängig von der größe des bepointerten Objects.

ausserdem sind Pointer die einzige möglichkeit wie einen Funktionsparamter nicht nur als IN sondern als IN/OUT zu verwenden

bei Antwort benachrichtigen
Anonym Dreamforger „Nachdem ich einige Programme direkt in Maschinensprache geschrieben habe nicht...“
Optionen

Im Normalfall 4 Byte!
Ginge aber auch kleiner (2 Byte), nur dann wäre nur noch ein
adressierbaren Bereich von 64 KByte möglich!

CU
Frank

bei Antwort benachrichtigen