01/10/2018, 16:15
Hỏi về code mảng con trỏ
#include <iostream>
using namespace std;
int* nhapmang(int *n){
cin >> *n;
int arr[100];
for(int i=0;i< *n;i++){
cin >>arr[i];
}
return arr;
}
int main(){
int n;
int *x=nhapmang(&n);
cout<<show<<x[2]<<endl;
for(int i=0;i< n;i++){
cout <<x[i]<<endl;
}
return 0;
}
kết quả ra như sau :

tai sao cout<<show<<x[2]<<endl chạy đúng; chạy đúng mà vòng for thi không đúng ạ
em đã thử khai bao int *arr=new int[100]; ở hàm nhapmang thì lại chạy đúng
thật không hiểu được . ai có thể giải thích hộ em với ạ thanks .
Bài liên quan
là 1 sự khởi tạo tạm bợ, vì vậy khi kết thúc hàm nó trở thành vùng nhớ tự dễ mất hết dữ liệu bởi hành vi ghi đè của hàm khác.
hãy sinh ra cá`i mảng đó trước rồi truyền vào hàm theo đối số ví dụ int* nhapmang(int *n,int array[])
> int main(){
Trong hàm nhapmang() bạn khai báo biến int arr[100] với ý định nhập vào các phần tử của mảng này. Tuy nhiên đây là một biến cục bộ cho nên nó được lưu vào vùng nhớ stack, sau khi kết thúc hàm này, biến này sẽ được xóa. Ở cuối hàm bạn return arr là trả về địa chỉ phần tử đầu tiên của mảng arr, tuy nhiên ở trong hàm main (bên ngoài hàm nhapmang), các giá trị tại vùng nhớ arr[i] là các giá trị ngẫu nhiên cho nên mới có kết quả như vậy.
Với bài toán của bạn có thể tham khảo đoạn code sau đây:
Thanks mọi người. có vẻ đã hiểu hơn