Здравствуйте, dilmah, Вы писали:
D>если r1 это действительно char, а r2 это действительно short, то это абсолютно корректный код. Никакая дополнительная память не выделяется.
char и short занимают меньше памяти чем int. Переменная int не создавалась вообще. printf читает из памяти 4 байта по указателю r. Что именно он читает? начальные байты short/char + то что дальше?