Что вы делаете в int createSet(int **set, int n)
, вы передаете указатель на указатель;не ссылка на указатель.Чтобы передать ссылку: int createSet(int * & set, int n)
.
В случае передачи по ссылке ваш код будет выглядеть следующим образом:
void createSet(int * & set, int n) // '&' for reference
{
set = new int[n];
}
int main()
{
int setAcapacity = 10;
int setANOE = 0;
int *setA = nullptr; // Better to initialize
createSet(setA, setAcapacity);
}
На ваш вопрос: Разница между передачей по ссылкеУказатель / ссылка и передача по значению заключается в том, что изменения, внесенные в аргументы, передаваемые указателем / ссылкой в вызываемую функцию, действуют в вызывающей функции, тогда как изменения, вносимые в аргументы, передаваемые по значению в вызываемой функции, не могут влиять на вызывающийфункция.# Значение # в вашем случае: # int-указатель #.
Вы передаете указатель / ссылку на # значение #, потому что вы хотите, чтобы присвоение цели setA
вызывающей функции: main (),Вот почему вы также передаете в исходном коде адрес setA
.Таким образом, new
может хранить новый указатель в этом адресе.
Кроме того, во многих случаях: передача по ссылкам более эффективна, чем передача по значению, поскольку она не копирует аргументы.Формальный параметр - это псевдоним для аргумента.Когда вызываемая функция читает или записывает формальный параметр, она фактически читает или записывает сам аргумент.