Почему код так работает? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет!!! не могу понять смысл кода и почему он так себя ведет
Листинг программы
  1. printf("%d", (int*)20 + 56);
это выводит 244, но почему так я не понимаю вообще.... подскажите пожалуйста, почему так код себя ведет. Всем спасибо за внимание и помощь!!!

Решение задачи: «Почему код так работает?»

textual
Листинг программы
  1.     // warning: assignment makes integer from pointer without a cast
  2.     int d = ((int*)20 + 56);
  3.     printf("%d\n", d);  // 244
  4.     // это тоже самое что
  5.     d = 20 + 56 * sizeof(int);
  6.     printf("%d\n", d);  // 244

Объяснение кода листинга программы

В данном коде:

  1. *int d = ((int)20 + 56);**
    • Сначала мы приводим 20 к типу int*, то есть указываем на адрес памяти, где находится число 20 (здесь и далее числа без кавычек - это значения, а с кавычками - это переменные).
    • Затем мы прибавляем к этому адресу 56. Так как размеры данных типов обычно 4 байта (или 1 int), то мы фактически прибавляем 56*4=224 к адресу 20.
    • Полученный адрес памяти 224 считается как число, что дает нам 224%4=244.
  2. printf(%d\n, d);
    • Мы выводим значение переменной d, которое равно 244.
  3. *d = 20 + 56 sizeof(int);**
    • Сначала мы умножаем 56 на размер одного int (sizeof(int)), который по умолчанию равен 4.
    • Затем мы прибавляем 20 к этому результату.
    • Полученное значение 20+56*4=244 присваиваем переменной d.
  4. printf(%d\n, d);
    • Мы выводим значение переменной d, которое также равно 244.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы