Каковы различия между различными символами (*, & и т. Д.) В сочетании с параметрами? [Дубликат]
Возможный дубликат:
c ++ * vs & в объявлении функции
Я знаю, что это, вероятно, кажется невероятно элементарным вопросом для многих из вас, но у меня действительно было невозможное время найти хорошее, подробное объяснение, несмотря на все мои лучшие поиски в Google. Я уверен, что ответ там, и поэтому мои условия поиска должны быть ужасными.
В C ++ для обозначения параметров используются различные символы и их комбинации (а также аргументы этих параметров). Каковы, собственно, их значения?
Пример: в чем разница междуvoid func(int *var)
а такжеvoid func(int **var)
? Что оint &var
?
Этот же вопрос относится к типам возвращаемых данных и аргументам. Что значитint& func(int var)
значит, по сравнению сint* func(int var)
? И в аргументах, как этоy = func(*x)
отличаться отy = func(&x)
?
Я более чем счастлив прочитать огромные тома на эту тему, если бы вы только указали мне правильное направление. Кроме того, я очень хорошо знаком с общими концепциями программирования: ОО, дженерики / шаблоны и т. Д., Но не с обозначениями, используемыми в C / C ++.
РЕДАКТИРОВАТЬ: Кажется, у меня создалось впечатление, что я не знаю, что такое указатели. Интересно, как это могло быть :)
Поэтому для пояснения: я прекрасно понимаю, как работают указатели. Что яне понять, и странно не могу найти ответы, это значение, например, 'void func (int & var)'. В случае оператора присваивания оператор «&» будет справа, как в «int * x = & y;», но в приведенном выше операторе «&» фактически слева. Другими словами, он работает с l-значением, а не с r-значением. Это явно не может иметь того же значения.
Надеюсь, что сейчас у меня больше смысла?