Jestem nowy w C++ (zwykle intro dla każdego początkującego XD). Cóż, rozwijałem program, kiedy pojawiło się nieoczekiwane zachowanie !! Śledziłem zmienne i tablice w moim programie, aż udało mi się określić wzór kodu, który wykonuje to zachowanie !!zmieniając wartości elementów tablicy z funkcji
Oto, co Użyłem prześledzić, jak to wszystko działa:
#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;
}
Myślę, że kod z uwagami wyjaśnia, gdzie jest problem, ale tutaj jest więcej informacji: istnieją 4 funkcje, mianowicie someFunction , someFunction2, someFunction3, someFunction4. Istnieje tablica, y, która ma wartości 0, 1, 2. wszystkie funkcje zmieniają wartość oryginalnej tablicy. Oznacza to, że elementy y w głównej funkcji po wywołaniu someFunctionX zmieniają się, niż przed wywoływaniem funkcji.
moje pytanie brzmi: dlaczego someFunction4 jest jedyną funkcją, która nie zmienia wartości?
z góry dzięki. i przepraszam za mój zły angielski.
dzięki. Twoja odpowiedź jest jasna. Jak sprawić, by stara tablica miała nową wartość? – joker
Pozbądź się przypisania 'x = new int [n];' – GraphicsMuncher
co jeśli chcę zmienić rozmiar tablicy z wewnątrz funkcji? – joker