& có nghĩa là reference: http://daynhauhoc.com/t/c-bai-42-reference/158
* là con trỏ, chắc ai cũng biết rồi. http://daynhauhoc.com/t/c-bai-19-con-tr/135
*& có nghĩa là reference đến pointer. Mà reference cho phép thay đổi được giá trị mà nó reference tới. Vậy ở đây con trỏ có thể thay đổi được.: http://daynhauhoc.com/t/c-bai-43-swap-by-reference/159
Hoặc bạn có thể thử như sau:
`c++
#include <iostream>
void change_pointer(int * p)
{
p = 0;
}
{
p = 0;
}
void change_pointer_by_ref(int *& p)
{
p = 0;
}
{
p = 0;
}
int main()
{
int * p = new int;
std::cout << "p = " << p << std::endl; // 0x372160
change_pointer(p);
std::cout << "p = " << p << std::endl; // 0x372160
change_pointer_by_ref(p);
std::cout << "p = " << p << std::endl; // 0
return 0;
}
Thử in giá trị của p sau khi sử dụng 2 hàm. Thì chỉ có hàm change_pointer_by_ref là giá trị của con trỏ p bị thay đổi thôi.
{
int * p = new int;
std::cout << "p = " << p << std::endl; // 0x372160
change_pointer(p);
std::cout << "p = " << p << std::endl; // 0x372160
change_pointer_by_ref(p);
std::cout << "p = " << p << std::endl; // 0
return 0;
}
`Thử in giá trị của p sau khi sử dụng 2 hàm. Thì chỉ có hàm change_pointer_by_ref là giá trị của con trỏ p bị thay đổi thôi.
Question:
Đổi ở đây là đổi giá trị con trỏ. Vậy địa chỉ con trỏ có đổi không anh? Có nhỉ?
Theo em nhớ thì anh nói con trỏ thực chất là 1 biến bình thường lưu giữ địa chỉ của biến thông thường khác..
Giả sử con trỏ p trỏ tới a= 5, vậy giá trị của nó là địa chỉ của a?
Vậy đổi giá tri con trỏ nghĩa là chuyển địa chỉ của a sang 1 ô nhớ khác còn giá trị a vẫn bằng 5???
Hay là em hiểu sai hướng nhỉ :-?
Theo em nhớ thì anh nói con trỏ thực chất là 1 biến bình thường lưu giữ địa chỉ của biến thông thường khác..
Giả sử con trỏ p trỏ tới a= 5, vậy giá trị của nó là địa chỉ của a?
Vậy đổi giá tri con trỏ nghĩa là chuyển địa chỉ của a sang 1 ô nhớ khác còn giá trị a vẫn bằng 5???
Hay là em hiểu sai hướng nhỉ :-?
Answer:
Em cho ví dụ đổi, anh sẽ giải thích.
Đúng
Đúng
Đổi giá trị của con trỏ có nghĩa là thay vì trỏ tới a, con trỏ trỏ tới ô khác, a vẫn bằng 5. Chứ không phải chuyển địa chỉ của a.
Additional Information:
Con trỏ em để ý tới 2 thứ. Một là giá trị nó đang giữ. Và địa chỉ của chính nó.
để lấy được địa chỉ của nó đang giữ:
p
&p
Vậy *&p trong C có nghĩa là gì? Trước hết &p có nghĩa là địa chỉ của p.
Vậy *(địa chỉ của p) tức là giá trị của địa chỉ của p. Tức là địa chỉ mà p đang giữ.
Suy ra *&p == p
source: http://daynhauhoc.com/t/khai-bao-trong-c-co-y-nghia-gi/738/7
p
để lấy được giá trị của địa chỉ của nó đang giữ:
*p
để lấy được địa chỉ của chính nó*p
&p
Vậy *&p trong C có nghĩa là gì? Trước hết &p có nghĩa là địa chỉ của p.
Vậy *(địa chỉ của p) tức là giá trị của địa chỉ của p. Tức là địa chỉ mà p đang giữ.
Suy ra *&p == p
source: http://daynhauhoc.com/t/khai-bao-trong-c-co-y-nghia-gi/738/7
0 comments :
Post a Comment