Anfänger Frage zu Array
-
#include <iostream> using namespace std; int main() { int array[10]; int i; for(i=0;i<13;i+=1) { array[i]=i; } for(i=0;i<13;i+=1) { cout << array[i] << endl; } cin.get(); }
Warum geht das? Wenn ich eine Array habe mit 10 Feldern. Warum kann ich dann 13 Werte spiechern?
-
Hi,
du schreibst in Speicher, der dir nicht gehört und erzeugst somit undefiniertes Verhalten.
Undefiniert heißt, dass es auch gut gehen kann.
Das ist allerdings kein valider Code.MfG Eisflamme
-
Facer schrieb:
#include <iostream> using namespace std; int main() { int array[10]; int i; for(i=0;i<13;i+=1) { array[i]=i; } for(i=0;i<13;i+=1) { cout << array[i] << endl; } cin.get(); }
Warum geht das? Wenn ich eine Array habe mit 10 Feldern. Warum kann ich dann 13 Werte spiechern?
Da der Compiler die Zugriffe nicht prüft kannst du das problemlos ausführen (der klaptscht den Offset drauf und fertig, die Arraygrenzen werden nicht geprüft) Was du machst kann böse enden. Änder doch mal die 13 auf wesentlich größere Werte und schau, ob es immernoch geht.
-
Im Tutorial war das auch nur bis 10 ich wollte das nur mal ausprobieren aber es hat ja trozdem geklappt.
-
Und warum das hab grad mit Array angefangen und hab noch nicht so den Durchblick.
char array6[2][5]= //die 2 ist optional { {'H','a','l','l','o'}, {'W','e','l','t'} }; //array[0][4] == 0
Kann mir das mal jemand so schreiben das ichs versteh?
-
Mis2com schrieb:
Hi,
du schreibst in Speicher, der dir nicht gehört und erzeugst somit undefiniertes Verhalten.
Undefiniert heißt, dass es auch gut gehen kann.
Das ist allerdings kein valider Code.MfG Eisflamme
Genau genommen kann ihm der Speicher durchaus gehören. Er kann halt dadurch andere Speicherbereiche überschreiben.
-
Facer schrieb:
Und warum das hab grad mit Array angefangen und hab noch nicht so den Durchblick.
char array6[2][5]= //die 2 ist optional { {'H','a','l','l','o'}, {'W','e','l','t'} }; //array[0][4] == 0
Kann mir das mal jemand so schreiben das ichs versteh?
Hier legst du ein 2dim Array an. (2mal nen 5er Block mit chars). Da du das Array sofort initialisiert könntest du dir die explizite Angabe der 1. Dimension sparen, da sie ja automatisch errechnet werden kann. In den geschweiften Klammern stehen die Werte für die Initialisierung. 'H' wird in [0][0] kopiert, 'a' in [0][1] und 'e' in [1][1] usw.
-
Ok danke und was ist mit dem Zitat?
warum sollte [0] == 0 sein wenn doch ein H drin ist? Das mit der 4 erkenn ich noch das die lehr ist.
-
Facer schrieb:
Ok danke und was ist mit dem Zitat?
warum sollte [0] == 0 sein wenn doch ein H drin ist? Das mit der 4 erkenn ich noch das die lehr ist.
???
array6[0] is eher vom typ char* undarray[0][4] == 0
ist (abgesehen davon, dass ne 6 beim Bezeichner fehlt) einfach ein Vergleich, der false liefert. In array6[0][4] steht ein 'o'
-
Ok jetzt ist alles klar danke für die Antworten.
-
Hi,
interpreter schrieb:
Mis2com schrieb:
Hi,
du schreibst in Speicher, der dir nicht gehört und erzeugst somit undefiniertes Verhalten.
Undefiniert heißt, dass es auch gut gehen kann.
Das ist allerdings kein valider Code.MfG Eisflamme
Genau genommen kann ihm der Speicher durchaus gehören. Er kann halt dadurch andere Speicherbereiche überschreiben.
Ja, hast Recht.
Im Tutorial war das auch nur bis 10 ich wollte das nur mal ausprobieren aber es hat ja trozdem geklappt.
du schreibst in Speicher, der dir nicht gehört und erzeugst somit undefiniertes Verhalten.
Undefiniert heißt, dass es auch gut gehen kann.MfG Eisflamme