IIR C, функции scanf () взяты из C и требуют, чтобы их аргументы были указателями, потому что исходный C вообще не имел передачи по ссылке для параметров.
Программист, пишущий функцию, должен был использовать указатели (которые передавали значение адреса памяти) для достижения результата, который дал бы передача по ссылке.
Я научился программировать с помощью Pascal и этого (вместе с отсутствие проверки границ массива) было одной из самых раздражающих вещей в C, когда я впервые узнал об этом.
Я считаю, что C ++ имеет передачу по ссылке, но функции scanf взяты из C язык stdio, чтобы они передавали параметры по значению.