Tôi mới sử dụng C++ (phần giới thiệu thông thường cho mỗi XD mới). Vâng, tôi đã phát triển một chương trình, khi một hành vi bất ngờ xuất hiện !! Tôi truy tìm các biến và mảng trong chương trình của mình cho đến khi tôi đã thành công trong việc xác định mẫu mã thực hiện hành vi này !!thay đổi giá trị của các phần tử mảng từ bên trong một hàm
Đây là điều mà chính tôi đã sử dụng để theo dõi cách làm việc:
#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;
}
Tôi nghĩ rằng mã với các ý kiến giải thích nơi mà vấn đề là, nhưng đây là biết thêm: có 4 chức năng, cụ thể là, someFunction , someFunction2, someFunction3, someFunction4. có một mảng, y, có giá trị 0, 1, 2. tất cả các hàm thay đổi giá trị của mảng ban đầu. Nghĩa là, các phần tử của y trong hàm chính sau khi thay đổi cuộc gọi someFunctionX hơn là trước khi gọi hàm.
câu hỏi của tôi là: tại sao someFunction4 là hàm duy nhất không thay đổi giá trị?
cảm ơn trước. và xin lỗi vì tiếng anh xấu của tôi.
cảm ơn. Câu trả lời của bạn là rõ ràng. Vì vậy, làm thế nào để làm cho mảng cũ có giá trị mới? – joker
Loại bỏ nhiệm vụ 'x = new int [n];' – GraphicsMuncher
nếu tôi muốn thay đổi kích thước mảng từ bên trong hàm? – joker