Позвонить по ссылке или по стоимости?

Я только начал использовать 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[] Аргумент в функции не является ссылочной переменной, так как любые изменения в этой вызываемой функции отражаются в вызывающей функции? Это правильный код, если вообще? Я основываю свой вопрос на том факте, что вызов по значению создает копии переменных и изменяет их, а вызов по ссылке изменяет сами фактические переменные. Извините, если этот вопрос немного глупый. Любая помощь в прояснении этой концепции была бы отличной.

Благодарю.

1 ответ

arr фактически является указателем на массив. Таким образом, в вашем случае он действует как ссылка, а функция меняет массив arr указывает на.

Если вы хотите сделать это больше C++, вы должны использовать std::vector<int> вместо int[] для вашего массива. std::vector имеет все функции массива в стиле C, но заботится об управлении памятью и фактическом количестве элементов.

В случае std::vector Вы действительно должны передать ссылку (std::vector &), в противном случае функция получит копию всего массива.

Другие вопросы по тегам