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
n
có địa chỉ là0x123
mang giá trị là 5.a
có địa chỉ là0x567
mang 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ị0x123
như 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_nho
thự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ỏ
a
vẫn trỏ tớin
chứ 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]=5
là bởi vì a[0] <=>*(a+0)=*a=n=5
.Nếu muốn thay đổi giá trị của
a
bạn phải truyền cho hàmcap_phat_bo_nho
con 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: