не проблема
S> Переменная int не создавалась вообще.
а, ну я думал что она создалась там где троеточие. Конечно r должен указывать на какой-то int.
S> printf читает из памяти 4 байта по указателю r. Что именно он читает? начальные байты short/char + то что дальше?
он читает нормальный инт, полученный расширением исходного char или short. Во время присваивания *r = (int)r1; происходит "расширение", недостающие байты заполняются нулями или знаковым битом (sign extension). Тут все корректно.