Hilfe bei Pointern und Dynamischen Speicher
-
Swordfish schrieb:
Ein Array ist kein Pointer. Ein Pointer ist kein Array.
Ein Array ist nach der Definition in Größe und Lage unveränderlich.
Der Name vom Array alleine steht für die Anfangsadresse des Array.Einem Pointer kannst du jederzeit einen neuen Wert zuweisen, so dass er auf andere Speicherstellen verweist
Ein char[] als Funktionsparamter ist ein char*.
Aber: Ein Array ist kein Pointer. Ein Pointer ist kein Array.
char a[] = "hello"; char b[] = "world"; char* p = a; // p zeigt auf das h von "hello" p = b; // p zeigt auf w von "world" p++; // p zeigt auf o von "world", das Zeichen hinter w a = b; geht nicht a++; geht nicht sizeof(a) ergibt 6 (5 Buchstaben + '\0') sizeof(b) ergibt 6 sizeof(p) ergibt sizeof(char*), die Größe eines Pointers
-
Ahhh ok vielen Dank
Das heißt also wenn zBchar* irgendetwas = "Hallo";
Dann zeigt der Pointer auf die erste Speichersetelle und somit das "H"?
-
buu2188 schrieb:
char* irgendetwas = "Hallo";
Dann zeigt der Pointer auf die erste Speichersetelle und somit das "H"?
Ja, ja das heißt es.
Etwas genauer:
"1" ist ein Stringliteral, da wird automatisch die '\0' angehängt. Es sind also zwei Zeichen
'1' ist ein Zeichen, das die Ziffer für Eins darstellt. IM ASCII ist das der Wert 49
'\1' ist ein Zeichen, das den Wert 1 hat. Siehe Escapesequencen und ASCII.
1 ist der Wert 1.Die erste Speicherstelle enthält ein 'H'
-
Vielen Dank habe es nun endlich verstanden
-
buu2188 schrieb:
was ist ein
char*
dann? Ich dachte es wäre das selbe wie
char[]
Ich hab' mir wirklich Mühe gegeben. Hast du wenigstens versucht, mein Geschreibsel zu verstehen!???
-
Ja vielen Dank auch dafür nur war mich das nicht so ganz plausibel
-
buu2188 schrieb:
[...]das nicht so ganz plausibel
Ernsthaft, lies ein gutes Buch. Mir hat das sooo viel geholfen. Lies die Bücher von Scotti, dann eins von Struppi, dann bist du auf nem - ich sag mal - gutem Stand.
Ernsthaft.
-
Eine andere Frage bin nun in diesem Kapitel meines Skriptes ...
Für was macht man Zeiger auf eine Klasse bei der Erzeugung eines Objektes für die dynamische Speicherverwaltung ? ( Ist mir nicht so ganz plausibel )
Mfg
-
Deine Frage ist so schwammig, das der Versuch einer Antwort unsinnig wäre. Was? Wie? Wo? Beispiel?
-
Für was macht man Zeiger auf eine Klasse bei der Erzeugung eines Objektes für die dynamische Speicherverwaltung ?
Ich verstehe die Frage nicht, kannst du die bitte verständlich formulieren?
Was ist ein "Zeiger auf eine Klasse"? Ein Zeiger zeigt auf Objekte (oder auf nichts).
Und was ist ein Objekte "für die dynamische Speicherverwaltung"? Einen std::allocator meinst du damit nicht, oder?
Ich schließe mich igivuatips Ratschlag an!
-
Kein Problem
Text:
Einzelne Objekte durch dynamische Allokation von Speicher.double* pD= new double; // Syntax eines Basistyps zum Vergleich // Erzeugung einzelner Objekte durch dynamische Allokation von Speicher CWayPoint* pWp1= new CWayPoint; CWayPoint* pWp2= new CWayPoint("Karlsruhe",8.4,40.017); // Verwendung von Objekten, die durch dynamische Allokation erzeugt worden sind pWp1->print(); pWp2->print();
Mein Übeltäter
CWayPoint* pWp1= new CWayPoint;
Was bewirkt das?
-
Sagen wirs so: Solange du keinen trifftigen Grund hast auf den Heap zu allokieren: Allokiere auf den Stack!
-
buu2188 schrieb:
CWayPoint* pWp1= new CWayPoint;
Was bewirkt das?
Initialisiert den Pointer to
CWayPoint
namenspWp1
mit dem Ergebnis einer Allokation von Speicher für ein Objekt des TypsCWayPoint
durchnew
.new
ruft den StandardkonstruktorCWayPoint::CWayPoint()
für das neue Objekt auf.// Warum die Ungarische Notation blöd ist.
//// Ist die eigentliche Frage "Wann dynamisch Speicher anfordern und wann besser nicht?"?