Почему код так работает? - C (СИ)
Формулировка задачи:
Всем привет!!! не могу понять смысл кода и почему он так себя ведет
это выводит 244, но почему так я не понимаю вообще.... подскажите пожалуйста, почему так код себя ведет.
Всем спасибо за внимание и помощь!!!
printf("%d", (int*)20 + 56);
Решение задачи: «Почему код так работает?»
textual
Листинг программы
// warning: assignment makes integer from pointer without a cast int d = ((int*)20 + 56); printf("%d\n", d); // 244 // это тоже самое что d = 20 + 56 * sizeof(int); printf("%d\n", d); // 244
Объяснение кода листинга программы
В данном коде:
- *int d = ((int)20 + 56);**
- Сначала мы приводим 20 к типу int*, то есть указываем на адрес памяти, где находится число 20 (здесь и далее числа без кавычек - это значения, а с кавычками - это переменные).
- Затем мы прибавляем к этому адресу 56. Так как размеры данных типов обычно 4 байта (или 1 int), то мы фактически прибавляем 56*4=224 к адресу 20.
- Полученный адрес памяти 224 считается как число, что дает нам 224%4=244.
- printf(
%d\n
, d);- Мы выводим значение переменной d, которое равно 244.
- *d = 20 + 56 sizeof(int);**
- Сначала мы умножаем 56 на размер одного int (sizeof(int)), который по умолчанию равен 4.
- Затем мы прибавляем 20 к этому результату.
- Полученное значение 20+56*4=244 присваиваем переменной d.
- printf(
%d\n
, d);- Мы выводим значение переменной d, которое также равно 244.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д