Fehlersuche in kleinem Programm
-
Danke, das hoff ich auch (und glaube das kann ich auch, was ich mir in den Kopf gesezt habe will ich!
)Gerade Pointer, Arrays durchgemacht und jetzt bei den Strings

ziemlich happig, aber das kommt gut
-
also die strings sind einfach
also ich meine die klasse damit
ist quasi wie im (noob)-java
relativ einfach...pointer sidn an sich auch nicht schwer aber man muss irgendwie immer etwas um die ecke denken
und da muss man sich etwas dran gewöhnenarrays sind ganz einfach, aber nach kurzer zeit sind das eig auch schon nur noch pointer auf sonstwas...
-
Für was sind die Arrays eigentlich, der wirkliche Nutzen wird in meinem Buch nicht erklärt, auch im Internet ist auf die schnelle kein konkretes Beispiel zu finden...

Ist es für Grafikberechnungen??

Morgen ist ja eh wiedermal ein repeat-day^^
-
Arrays sind quasi starre Container für beliebige Datentypen. Du kannst also zum Beispiel die monatlichen Umsätze von einem Unternehmen als long speichern ohne das du 12 Variablen anlegen musst und wenn du dann zum Beispiel den Umsatz vom Februar willst kannst du über den Index 1 darauf zugreifen (weil ja bei 0 angefangen wird zu zählen).
MfG
-
OK danke für deine Antwort, ist mir jetzt schon klarer

-
arrays sind auf gut deutsch ein speicher für einen datentyp mit einer bestimmten grösse
für manche probleme (primzahlberechnung per brute force oder wahrscheinlichkeiten bzw mittelwerte) braucht man halt 10000 zahlen um es zu lösen
ja und man könnte jetzt 10000 variablen einzeln erstellen
oder eben arrays benutzen:int a1, a2, a3, a4, ..., a10000; // 10000 einzelne variablen int a[10000]; // ein array mit 10000 speicherplätzen
-
Noch ne kleine Frage:
#include <iostream> #include <cstring> char String1[12]; char String2[6]; using namespace std; int main(void) { strcpy(String1, "Hello World"); cout << String1 << '\n'; strcpy(String2, String1); cout << String2 << endl; }Ich find da im Buch & Google keine Antwort, wieso kann String2 den Wert "Hello World" aufnehmen obwohl ich ihn mit 6 definiert habe

Wird da der Wert gleich mitkopiert? Kann man also nicht so direkt das Programm zwingen nur "Hello" auszugeben?
-
Du hast einfach Glück gehabt.
String2bietet nur für 6 Zeichen Platz (inklusive abschliessendem '\0'). Das heisst, du schreibst in irgendeinen Speicherbereich. Das Verhalten davon ist undefiniert, deshalb kann es funktionieren, aber auch nicht. Gewöhn dir jedoch an, das nicht so zu machen.Um die 5 Zeichen (fünf, wegen Nullterminierung) zu erzwingen, kannst du die Funktion
strstr(), die einen Teil des Strings zurückgibt, verwenden.In diesem Zusammenhang möchte ich dich aber gerade auf die C++-Klasse
std::stringaufmerksam machen, die einiges vereinfacht und dir die Speicherverwaltung abnimmt.
-
Hab doch gedacht dass ich sowas schon gelesen habe

Zufall heisst wohl, dass diese Speicheradresse nicht von anderen Programmen besetzt ist

Werds mir jedenfalls nicht angewöhnen - danke

-
Skyese schrieb:
Zufall heisst wohl, dass diese Speicheradresse nicht von anderen Programmen besetzt ist ;))
Nein, normalerweise haben andere Programme auf 32-Bit-Systemen dank virtuellem Adressraum keinen Zugriff auf den Arbeitsspeicher für das Programm.
Es kommt eben drauf an, möglicherweise steht an der Stelle bereits ein Wert, oder die Adresse kann nicht beschrieben werden, oder sie ist einfach ungültig. Speicher, den du nicht reserviert hast, solltest du niemals beschreiben.Hauptsache, du merkst dir
std::string