Hey Leute!
Ich bin gerade am C++ lernen und bin jetzt im Buch "Thinking in C++" über eine Aufgabe gestolpert, die ich nicht ganz verstehe. Ich poste hier nur die wesentlichen Codeschnipsel:
Jetzt meine Frage:
In der main() wird in der 9.Zeile ein int* übergeben. Das wird dann in der Funktion add() zu einem unsigned char* gecastet. Nur was passiert dann in der for-Schleife im Speicher?
Wenn ich jetzt einen int-Wert (auf den der Zeiger zeigt) von z.B. 100000 habe: Wie wird die Zahl dann auf die char-Elemente aufgeteilt?
Am Schluss wird ja dann alles wieder mit fetch() ausgegeben.
Lg
Ich bin gerade am C++ lernen und bin jetzt im Buch "Thinking in C++" über eine Aufgabe gestolpert, die ich nicht ganz verstehe. Ich poste hier nur die wesentlichen Codeschnipsel:
Code:
struct Stash // Sollte Hilfe bei der Speicherreservierung sein
{
int size; // Die Grundgröße in Bytes, um die immer erhöht wird
int quantity; // Die Anzahl der Speichereinheiten
int next; // Zeigt an, wo der unbenützte Speicher beginnt
unsigned char *storage; // Der reservierte Speicher
void initialize (int size);
void cleanup();
int add (const void *element);
void *fetch (int index);
int count();
void inflate (int increase);
};
Code:
int Stash::add (const void *element) // Funktion, um einen Wert im Speicher zu speichern
{
unsigned char *e;
int i, startBytes;
if (next >= quantity) // Next markiert das nächste leere Element
{
inflate (increment); // Es wird wieder Speicher hinzugefügt
}
startBytes = next * size; // In startBytes wird gespeichert, ab welchem Element der Speicher noch unbeschrieben ist
e = (unsigned char *) element; // e zeigt auf die angegebene Adresse. wird in unsigned char * umgewandelt, damit man mit allen Typen gleich verfahren kann
for (i = 0; i < size; i++) // Da e auf unsigned char * ist, ist jedes Element ein eigenes Byte, deshalb bis size
{
storage[startBytes+i] = e[i];
}
cout << endl << endl << endl;
next++;
return (next-1);
}
Code:
int main ()
{
Stash intStash;
intStash.initialize (sizeof (int));
for (int i = 0; i < 99; i++)
{
intStash.add (&i);
}
for (int j = 0; j < intStash.count(); j++)
{
cout << "intStash.fetch (" << j << ") = " << * (int *)intStash.fetch (j) << endl; // wieder auf int* zurückcasten
}
}
Jetzt meine Frage:
In der main() wird in der 9.Zeile ein int* übergeben. Das wird dann in der Funktion add() zu einem unsigned char* gecastet. Nur was passiert dann in der for-Schleife im Speicher?
Wenn ich jetzt einen int-Wert (auf den der Zeiger zeigt) von z.B. 100000 habe: Wie wird die Zahl dann auf die char-Elemente aufgeteilt?
Am Schluss wird ja dann alles wieder mit fetch() ausgegeben.
Lg