Ich habe die C-Programmierung überprüft und es gibt nur ein paar Dinge, die mich stören.
Nehmen wir diesen Code zum Beispiel:
int myArray[5] = {1, 2, 2147483648, 4, 5};
int* ptr = myArray;
int i;
for(i=0; i<5; i++, ptr++)
printf("\n Element %d holds %d at address %p", i, myArray[i], ptr);
Ich weiß, dass ein int einen Maximalwert von positiv 2.147.483.647 halten kann. Geht man darüber hinweg, "geht es über" zur nächsten Speicheradresse, wodurch Element 2 an dieser Adresse als "-2147483648" angezeigt wird? Aber dann ist das nicht wirklich sinnvoll, da in der Ausgabe immer noch steht, dass die nächste Adresse den Wert 4, dann 5 enthält. Wenn die Zahl auf die nächste Adresse übergegangen wäre, würde das den an dieser Adresse gespeicherten Wert nicht ändern ?
Ich erinnere mich vage daran, wie ich in MIPS Assembly programmiert habe und beobachtet habe, wie sich die Werte der Adressen während des Programms schrittweise geändert haben, dass sich die diesen Adressen zugewiesenen Werte ändern würden.
Wenn ich mich nicht falsch erinnere, ist hier eine andere Frage: Wenn die einer bestimmten Adresse zugewiesene Nummer größer ist als der Typ (wie in myArray [2]), hat dies dann keinen Einfluss auf die unter der nachfolgenden Adresse gespeicherten Werte?
Beispiel: Wir haben int myNum = 4 Milliarden an der Adresse 0x10010000. Natürlich kann myNum keine 4 Milliarden speichern, daher erscheint es als negative Zahl an dieser Adresse. Obwohl diese große Zahl nicht gespeichert werden kann, hat dies keine Auswirkungen auf den unter der nachfolgenden Adresse 0x10010004 gespeicherten Wert. Richtig?
Die Speicheradressen haben gerade genug Platz, um bestimmte Zahlen- / Zeichengrößen aufzunehmen, und wenn die Größe den Grenzwert überschreitet, wird sie anders dargestellt (wie der Versuch, 4 Milliarden in das int zu speichern, aber es wird als negative Zahl angezeigt) und Daher hat dies keine Auswirkung auf die unter der nächsten Adresse gespeicherten Zahlen / Zeichen.
Entschuldigung, wenn ich über Bord gegangen bin. Ich habe den ganzen Tag einen großen Hirnfurz davon.
int c = INT.MAXINT; c+=1;
und sehen, was mit c passiert ist.