30/09/2018, 23:21
Hỏi về con trỏ các kiểu:Tại sao a[0] = 5;
void cap_phat_bo_nho(int*a)
{ a= new int[5];
for(int i=0; i<5; i++) a[i]=i+1;
}
void main()
{ int n=5;
int *a= &n;
cap_phat_bo_nho(a);
printf(“Giá trị a[0]=%d và n=%d”,a[0],n);
}
Bài liên quan





Bạn theo dõi hình này nha (thông cảm vì mình vẽ xấu).
Giả sử biến
ncó địa chỉ là0x123mang giá trị là 5.acó địa chỉ là0x567mang giá trị0x123(địa chỉ củan). Khi chương trình gọi hàmcap_phat_bo_nho(a)thì compiler sẽ tạo một vùng nhớ giống hệt con trỏađã khai báo ở trên tức là nó trỏ đếnn(mang giá trị0x123như trong hình), nhưng vùng nhớ này hoàn toàn phân biệt với con trỏa(nằm ở địa chỉ0x789) truyền vào hàm. Và trong thân hàmcap_phat_bo_nhothực hiện thay đổi giá trị của vùng nhớ này (trỏ tới địa chỉ0x456)…Sau khi ra khỏi hàm, con trỏ
avẫn trỏ tớinchứ không trỏ tới vùng nhớ bạn cấp phát. Bạn có thể in địa chỉ củaaở trong và ngoài hàmcap_phat_bo_nhođể rõ hơn. Và lý do tại saoa[0]=5là bởi vì a[0] <=>*(a+0)=*a=n=5.Nếu muốn thay đổi giá trị của
abạn phải truyền cho hàmcap_phat_bo_nhocon trỏ cấp 2 trỏ tới a(C or C++) hoặc một reference tới a (only C++)Quá tuyệt cho 1 câu trả lời
Bạn cho mình 1 ví dụ về con trỏ cấp 2 trong bài này đc ko?
This post was flagged by the community and is temporarily hidden.
Con trỏ cấp 2:
Dùng reference: