C ++ Array передается по ссылке, но как это понять?

0

Массивы передаются по ссылке. Любые изменения, внесенные в массив в функции changeArray будут наблюдаться в области вызова (main функция здесь).

Однако нижеприведенные коды печатают 0 1 в 0 1cout и печатают 2 во 2 -м "cout". Я не понимаю, почему первый cout печатает исходное значение array[0]=1 вместо измененного значения array[0]=2?

Большое спасибо.

#include <iostream>

using namespace std;

int changeArray(int array[]) {
    array[0]=2*array[0];
    return 0;
}

int main() {
    int array[]={1,2,3,4};
    cout << changeArray(array) << " " << array[0] << endl;
    cout << array[0] << endl;
    return 0;
}
Теги:
arrays
reference

1 ответ

3
Лучший ответ

Чтобы убедиться, что компилятор не изменил порядок выполнения:

cout << array[0] << endl;
changeArray(array);
cout << array[0] << endl;

Это печатает 1, а затем 2.

Компилятору C++ разрешено оптимизировать код путем переупорядочения выполнения кода в пределах одного выражения (например, cout << changeArray(array) << " " << array[0] << endl). Чтобы этого избежать, и чтобы changeArray сначала вызывался, вам нужно разделить выражение на отдельные операторы, например, используя точку с запятой (;). Все перед тем, как точка с запятой будет выполняться до того, как начнется точка с запятой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню