C всегда стремился быть хорошо работающим и «близким к металлу», и передача примитивов (целых чисел / указателей / чисел с плавающей точкой) по ссылкам просто неоптимальна (у первобытного C не было структур, и когда он их получализначально они были довольно ограничены, и вы не могли передать их по значению или вернуть их.)
Передача по ссылке обязательно включает в себя передачу (неявно разыменованный) указатель, и если вы собираетесь передать указатель,Вы также можете передать значение напрямую и избавить вызываемого от необходимости извлечения цели указателя.
Передача значений напрямую также помогает повысить производительность, поскольку вы можете придерживаться регистров и пропускать гораздо более медленную память.
И последнее, но не менее важное: это облегчает рассуждение о коде, потому что вы знаете, что вызываемый объект не может изменить переменную, которую вы передали ему по значению.