Я новичок в С++ (обычный ввод для каждого новичка XD). Ну, я разрабатывал программу, когда появилось неожиданное поведение!! Я проследил переменные и массивы в моей программе, пока мне не удалось определить шаблон кода, который выполняет это поведение.
Вот то, что я использовал, чтобы проследить, как все работает:
#include <iostream>
using namespace std;
void showArray(int arr[], int n)
{
for(int i = 0; i < n; i++) cout << arr[i] << " ";
cout << endl;
}
void someFunction(int x[], int n) // changes the original values
{
x[0] = 2;
x[1] = 1;
x[2] = 0;
}
void someFunction2(int * x, int n)
{
x[0] = 2;
x[1] = 1;
x[2] = 0;
} // changes the original values
int someFunction3(int x[], int n)
{
x[0] = 2;
x[1] = 1;
x[2] = 0;
return 0;
} // changes the original values
int someFunction4(int x[], int n)
{
x = new int[n];
x[0] = 2;
x[1] = 1;
x[2] = 0;
return 0;
} // does NOT change the original value
int main(void)
{
int * y = new int[3];
y[0] = 0;
y[1] = 1;
y[2] = 2;
showArray(y, 3);
someFunction4(y, 3);
showArray(y, 3);
return 0;
}
Я думаю, что код с комментариями объясняет, где проблема, но здесь больше информации: существует 4 функции, а именно: someFunction, someFunction2, someFunction3, someFunction4. есть массив y, который имеет значения 0, 1, 2. все функции меняют значение исходного массива. То есть, элементы y в основной функции после вызова someFunctionX меняются, чем они были до вызова функции.
мой вопрос: почему someFunction4 является единственной функцией, которая не меняет значения?
Заранее спасибо. и извините за мой плохой английский.