Я только начал использовать C ++, с базой в C. Узнав о Call по ссылке, мне нужно знать, если в следующей функции я нашел онлайн:
int insertSorted(int arr[], int n, int key, int capacity)
{
if (n >= capacity)
return n;
arr[n] = key;
return (n+1);
}
,который используется для вставки в несортированный массив, будет ли затронут / изменен массив в основной функции? Так как arr[]
Аргумент в функции не является ссылочной переменной, так как любые изменения в этой вызываемой функции отражаются в вызывающей функции? Это правильный код, если вообще? Я основываю свой вопрос на том факте, что вызов по значению создает копии переменных и изменяет их, а вызов по ссылке изменяет сами фактические переменные. Извините, если этот вопрос немного глупый.
Любая помощь в прояснении этой концепции была бы отличной.
Благодарю.
arr
фактически является указателем на массив. Таким образом, в вашем случае он действует как ссылка, а функция меняет массив arr
указывает на.
Если вы хотите сделать это больше C ++, вы должны использовать std::vector<int>
вместо int[]
для вашего массива. std::vector
имеет все функции массива в стиле C, но заботится об управлении памятью и фактическом количестве элементов.
В случае std::vector
Вы действительно должны передать ссылку (std::vector &
), в противном случае функция получит копию всего массива.
Других решений пока нет …