В случае назначения переменных (т. Е. int* ptr = &value
), использование амперсанда вернет адрес вашей переменной (в данном случае, адрес value
).
В параметрах функции использование амперсанда означает, что вы передаете доступ или ссылку на одну и ту же физическую область в памяти переменной (если вы ее не используете, вместо этого отправляется копия).Если вы используете звездочку как часть параметра, вы указываете, что передаете указатель на переменную, что приведет к тому же самому.Разница здесь в том, что с амперсандом у вас будет прямой доступ к переменной через имя, но если вы передадите указатель, вам нужно будет deference этот указатель, чтобы получить и манипулировать фактическим значением:
void increase1(int &value) {
value++;
}
void increase2(int *value) {
(*value)++;
}
void increase3(int value) {
value++;
}
Обратите внимание, что increase3
не влияет на исходное значение, которое вы передаете, потому что отправляется только копия:
int main() {
int number = 5;
increase1(number);
increase2(&number);
increase3(number);
return 0;
}
Значение number
в конце3 функциональных вызова - это 7, а не 8.