Массивы передаются по ссылке. Любые изменения, внесенные в массив в функции changeArray
будут наблюдаться в области вызова (main
функция здесь).
Однако нижеприведенные коды печатают 0 1
в 0 1
-м cout
и печатают 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;
}
Чтобы убедиться, что компилятор не изменил порядок выполнения:
cout << array[0] << endl;
changeArray(array);
cout << array[0] << endl;
Это печатает 1, а затем 2.
Компилятору C++ разрешено оптимизировать код путем переупорядочения выполнения кода в пределах одного выражения (например, cout << changeArray(array) << " " << array[0] << endl
). Чтобы этого избежать, и чтобы changeArray
сначала вызывался, вам нужно разделить выражение на отдельные операторы, например, используя точку с запятой (;
). Все перед тем, как точка с запятой будет выполняться до того, как начнется точка с запятой.