Я изучал программирование на Си, и меня беспокоит всего пара вещей.
Давайте возьмем этот код для примера:
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 Assembly и наблюдения за изменением значений адресов во время программы, шаг за шагом, что значения, назначенные этим адресам, будут меняться.
Если я не помню неправильно, тогда возникает другой вопрос: если число, назначенное конкретному адресу, больше, чем тип (как в myArray [2]), то не влияет ли это на значения, сохраненные в последующем адресе?
Пример: у нас есть int myNum = 4 миллиарда по адресу 0x10010000. Конечно, myNum не может хранить 4 миллиарда, поэтому он выглядит как отрицательное число по этому адресу. Несмотря на невозможность сохранить это большое число, оно не влияет на значение, сохраненное по последующему адресу 0x10010004. Правильный?
Адреса памяти просто имеют достаточно места для хранения чисел / символов определенного размера, и если размер превысит лимит, он будет представлен по-другому (например, попытка сохранить 4 миллиарда в int, но будет отображаться как отрицательное число) и так что это не влияет на числа / символы, хранящиеся по следующему адресу.
Извините, если я пошел за борт. У меня от этого весь день пукнул мозг.
int c = INT.MAXINT; c+=1;
и посмотреть, что случилось с c.