Или функция, запрашивающая указатель, и когда мы ее используем, & создает указатель на эту переменную?
Это точно.
В C ++Символ &
имеет несколько значений:
- При применении в выражении в качестве унарного оператора это означает «получить адрес» и создает указатель;
- Когда частьтип, подобный
int&
(или, на самом деле, int*&
), это означает «ссылка на»; - (И, когда применяется как двоичный оператор между двумя арифметическими выражениями, это означает «побитовое значение »AND".)
С выбором использования &
для ссылочных типов, я думаю, идея заключалась в том, чтобы сохранить создание новых символов и попытаться создать некоторую симметрию между указателями иРекомендации.Я не думаю, что это сработало;Я думаю, что это действительно сбивает с толку.
Но для вас, в C, это спорный вопрос, потому что (как вы обнаружили!) C не имеет ссылок.Вместо этого ваша функция может быть написана для получения указателя на указатель (int**
).По иронии судьбы вам, вероятно, понадобится использовать &
на сайте вызова, чтобы представить свой аргумент такой функции!
В качестве дополнительного усложнения вы иногда будете слышать фразу «передача по ссылке», используемую вширокий смысл.Это вводит в заблуждение в области C ++, потому что там «ссылка» имеет более конкретное значение.Фактически, ссылки были введены в язык C ++ специально для того, чтобы сделать «передачу по ссылке» более элегантной и интуитивно понятной.Но вернемся к Си и, в более общем смысле, это просто способ сказать: «мы ссылаемся на вещь, а не копируем ее»;технически в C способ, которым мы делаем это, действительно, чтобы передать указатель .