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

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

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

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

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

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

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

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

  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
Похожие ответы