когда мы хотим определить функцию, которая получает аргумент по ссылке, что означает функцию, которая получает указатель в качестве аргумента
Есть ваша проблема: вы перепутали семантику с реализация .
Аргумент, который является ссылкой в C ++, является аргументом, который является ссылкой.Вот и все, что касается C ++.Это ссылочный аргумент, и он ведет себя так, как стандарт говорит, что ссылочный аргумент ведет себя.
Реализация такой вещи в ABI, используемой компилятором, может включать передачу указателя.Но дело в том, что делает компилятор, а не в том, что происходит в модели C ++, определенной стандартом.
почему бы нам не использовать тот же синтаксис, который мы использовали для определения указателя
Поскольку это определение функции, которая принимает указатель .
Указатель и ссылка - это не одно и то же.Переменные указателя могут указывать на разные объекты в разное время;ссылочные переменные не могут .Как только ссылка связана с объектом, она остается связанной с этим объектом, точка.
Указатели могут быть NULL.Ссылки не могут , или, по крайней мере, если вы делаете что-то, что создаст NULL-ссылку, вы вызываете UB, так что нет смысла говорить о поведении программы после этого.И т. Д.
Однако эта ссылочная переменная реализована внутри, это правила ссылок C ++, и компилятор должен их соблюдать.