Я переглядав програмування на С і є лише кілька речей, які мене турбують.
Візьмемо для прикладу цей код:
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);
Я знаю, що int може містити максимальне значення позитивного 2,147,483,647. Отже, перейшовши на це, чи "перекидається" на наступну адресу пам'яті, через що елемент 2 відображається як "-2147483648" за цією адресою? Але тоді це насправді не має сенсу, оскільки у висновку все ще йдеться про те, що наступна адреса містить значення 4, а потім 5. Якби число перелилося на наступну адресу, чи не змінило б це значення, збережене за цією адресою ?
Я нечітко пам’ятаю програмування в MIPS зборах і перегляд адрес, які змінюють значення протягом програми, крок за кроком, що значення, призначені для цих адрес, змінюватимуться.
Якщо я не пам’ятаю неправильно, то тут є ще одне питання: Якщо число, призначене певній адресі, перевищує тип (наприклад, у myArray [2]), чи не впливає це на значення, збережені на наступній адресі?
Приклад: Ми маємо int myNum = 4 мільярди за адресою 0x10010000. Звичайно, myNum не може зберігати 4 мільярди, тому це відображається як якесь негативне число за цією адресою. Незважаючи на неможливість зберігання такої великої кількості, це не впливає на значення, збережене за наступною адресою 0x10010004. Правильно?
Адресам пам'яті просто достатньо місця для розміщення певних розмірів чисел / символів, і якщо розмір перевищить ліміт, він буде представлений інакше (як, наприклад, спроба зберігати 4 мільярди в int, але це буде відображатися як негативне число) і тому це не впливає на числа / символи, що зберігаються за наступною адресою.
Вибачте, якщо я перейшов за борт. Цілий день я маю головний мозок від цього мозку.
int c = INT.MAXINT; c+=1;
і подивіться, що сталося з c.