Да. Обозначение *
говорит, что то, что передается в стеке, является указателем, то есть адресом чего-либо. &
говорит, что это ссылка. Эффект похож, но не идентичен:
Давайте рассмотрим два случая:
void examP(int* ip);
void examR(int& i);
int i;
Если я звоню examP
, я пишу
examP(&i);
, который берет адрес элемента и передает его в стек. Если я позвоню examR
,
examR(i);
Мне это не нужно; теперь компилятор «каким-то образом» передает ссылку - что практически означает, что он получает и передает адрес i
. На стороне кода, тогда
void examP(int* ip){
*ip += 1;
}
Я должен разыменовать указатель. ip += 1
делает что-то совсем другое.
void examR(int& i){
i += 1;
}
всегда обновляет значение i
.
Чтобы больше думать, прочитайте «вызов по ссылке» против «вызов по значению». Понятие &
дает вызов C ++ по ссылке.