Фига вы тут даёте… при объявлении переменной компилятор со выделяет область памяти инищиализироавнную чем угодно.
Функция scanf парсит текст и просто пишет результат по указанному адресу.
Что за конструкторы то … Конструктор это по сути функция которая просто приведет значения к заранее известным. Чтобы не было как в анекдоте про Буратино и яблоки…
Не чем угодно, а как соизволил писатель кода.
И опять-же, для просто попарсить нужно выделить память.
Сам в шоке, не так давно начал вникать в тему выделения памяти. ))
Просто Си это, второй после Ассемблера, язык богов. Соответственно можно сделать все что пожелается. Так что не “Мы тут даете”. Это ТС тут “даетете”, а мы уже просто подсказываем, исходя из опыта.