Przeglądałem programowanie w C i przeszkadza mi tylko kilka rzeczy.
Weźmy na przykład ten kod:
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);
Wiem, że int może pomieścić maksymalną wartość dodatnią 2 147 483 647. A zatem, przechodząc o jeden powyżej, „rozlewa się” na następny adres pamięci, co powoduje, że element 2 pojawia się pod tym adresem jako „-2147483648”? Ale to naprawdę nie ma sensu, ponieważ na wyjściu nadal jest napisane, że następny adres zawiera wartość 4, a następnie 5. Jeśli liczba przelałaby się na następny adres, to nie zmieniłoby to wartości zapisanej pod tym adresem ?
Nie pamiętam z programowania w MIPS Assembly i patrzenia, jak adresy zmieniają się podczas programu krok po kroku, że wartości przypisane do tych adresów zmieniają się.
O ile nie pamiętam niepoprawnie, oto kolejne pytanie: Jeśli liczba przypisana do określonego adresu jest większa niż typ (jak w myArray [2]), to czy nie wpływa to na wartości przechowywane pod kolejnym adresem?
Przykład: Mamy int myNum = 4 miliardy pod adresem 0x10010000. Oczywiście myNum nie może przechowywać 4 miliardów, więc pojawia się jako pewna liczba ujemna pod tym adresem. Mimo że nie jest w stanie zapisać tak dużej liczby, nie ma to wpływu na wartość przechowywaną pod kolejnym adresem 0x10010004. Poprawny?
Adresy pamięci mają po prostu wystarczającą ilość miejsca, aby pomieścić pewne rozmiary liczb / znaków, a jeśli rozmiar przekroczy limit, wówczas będzie reprezentowany inaczej (jak próba zapisania 4 miliardów w int, ale pojawi się jako liczba ujemna) i więc nie ma to wpływu na liczby / znaki przechowywane pod następnym adresem.
Przepraszam, jeśli poszedłem za burtę. Cały dzień miałem od tego pierdnięcie mózgu.
int c = INT.MAXINT; c+=1;
i zobacz, co się stało z c.