Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Ich bin nicht an sprintf_s gebunden, mein Problem war nur, dass ich für die Funktion eine char* erwartet, und ich es mit static_cast nicht geschafft hab, die int - Variable umzuwandeln.
Ich hab C++ durch das Buch gelernt und C kenn ich noch ein wenig vom letzten Jahr in der HTL. Im Buch hab ich es offensichtlich nicht ganz mitbekommen oder verstandenbei arrays wird das sternchen durch den index-operator ersetzt.
wie hast du c++ gelernt? in jedem guten buch wird das eigentlich erklärt.
Man kann den Index Operator auch bei Zeigern verwenden. a[x] ist nichts anderes als *(a+x). Insbesondere ist also a[0] das gleiche wie *a, was dem dereferenzieren entspricht. Zudem ist ein Array nicht nur Prinzipiell ein Zeiger. Ein Array ist ein Zeiger, der direkt auf die Anfangsadresse eines entsprechend der Arraygröße reservierten Speicherbereiches zeigt. Mit einem Zeiger alleine ist halt kein Speicherbereich verbunden.
Das Problem bei dem Code im Eröffnungspost ist, dass der Zeiger auf die Adresse der Konstanten zeigt. Diese werden in der Executabel in einem extra Data Bereich gespeichert und vom Betriebssystem natürlich auch in den Speicher geladen. Allerdings werden Speicherbereiche in denen Programmcode und Daten stehen meist aus Sicherheitsgründen auf read only gesetzt. Hat man ein Betriebsystem ohne Speicherschutz, oder schreibt man selber ein Betriebsystem, ist das Vorgehen durchaus möglich.
Vielen Dank für eure Erklärungen Jetzt hats bei mir klick gemacht.das chararray von David_pb ist im grunde auch nur ein zeiger, mit dem unterschied, dass du den index-operator( [] ) drauf anwenden kannst.
Zudem ist ein Array nicht nur Prinzipiell ein Zeiger. Ein Array ist ein Zeiger, der direkt auf die Anfangsadresse eines entsprechend der Arraygröße reservierten Speicherbereiches zeigt. Mit einem Zeiger alleine ist halt kein Speicherbereich verbunden.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
int main() { int a[42]; int* b = a; cout << sizeof(a) << endl; cout << sizeof(b) << endl; } |
bei arrays wird das sternchen durch den index-operator ersetzt.
wie hast du c++ gelernt? in jedem guten buch wird das eigentlich erklärt.
Das Problem bei dem Code im Eröffnungspost ist, dass der Zeiger auf die Adresse der Konstanten zeigt. Diese werden in der Executabel in einem extra Data Bereich gespeichert und vom Betriebssystem natürlich auch in den Speicher geladen.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (21.06.2010, 17:01)
Achtung, ein Array ist nicht einfach nur ein Zeiger auf das erste Element! Ein Array ist ein Array, es existiert lediglich eine implizite Konvertierung von einem Array in einen Zeiger auf sein erstes Element.
Achtung, ein Array ist nicht einfach nur ein Zeiger auf das erste Element! Ein Array ist ein Array, es existiert lediglich eine implizite Konvertierung von einem Array in einen Zeiger auf sein erstes Element.
Also wenn ich ein Normales Char - Array habe kann ich dass einfach so einem Pointer übergeben, weil der die Adresse des Ersten Speicherplatztes im Array "übernimmt" ?
Community-Fossil
Es wird nicht einfach irgendwas ersetzt. Wie schon Tobiking gesagt hat kannst du den [] Operator genauso in Verbindug mit Pointern nutzen wie den Dereferezierungsoperator (*) in Zusammenhang mit Arrays...
Zitat
Achtung, ein Array ist nicht einfach nur ein Zeiger auf das erste Element! Ein Array ist ein Array, es existiert lediglich eine implizite Konvertierung von einem Array in einen Zeiger auf sein erstes Element.
Zitat
C-/C++-Quelltext
1 2 3 4 5 6 7 8 int main() { int a[42]; int* b = a; cout << sizeof(a) << endl; cout << sizeof(b) << endl; }
@Ombalat: ja du kannst das array an eine funktion übergeben um die daten im array zu ändern oder es einfach aus zu lesen ohne kopieren zu müssen. so machts ja auch die funktion sprintf_s.
dabei solltest du aber beachten was dabei raus kommt:
Zitat
C-/C++-Quelltext
1 2 3 4 5 6 7 8 int main() { int a[42]; int* b = a; cout << sizeof(a) << endl; cout << sizeof(b) << endl; }
Werbeanzeige