30/09/2018, 17:39
Sự khác nhau giữa tham chiếu kiểu con trỏ và con trỏ?
Mọi người cho e hỏi sự khác nhau giữa tham chiếu kiểu con trỏ và con trỏ với ạ , e có 2 đoạn code
vd int k(int* &a) và int k(int *a)
theo e hiểu thì có phải cả 2 cái đều nhận vào là 1 địa chỉ của vùng nhớ phải không ạ ,mà nếu đã truyền thẳng địa chỉ rồi thì cần gì tham chiếu nhỉ ??
Bài liên quan
Tham số của hàm thứ nhất là tham chiếu con trỏ. Khi đối số được truyền vào là con trỏ thì nó dùng chính con trỏ đó để thao tác.
Tham số của hàm thứ hai là con trỏ. Khi đối số được truyền vào là con trỏ thì nó dùng bản sao trên vùng nhớ stack của con trỏ đó.
Tham chiếu hiểu như là bí danh nickname ấy
Truyền tham chiếu kiểu con trỏ nếu bạn muốn thay đổi chính con trỏ ( tức là thay đổi địa chỉ con trỏ trỏ tới) hơn là đối tượng con trỏ đang trỏ tới. Hơi khó hiểu 1 chút nhưng lý do là vầy:
int k(int *a): Cái này là truyền con trỏ vào nhưng không thể nào thay đổi được địa chỉ con trỏ trỏ tới, chỉ có thể được nội dung của đối tượng con trỏ đang trỏ tới. Bởi vì pointer vẫn được truyền theo dạng truyền giá trị, tức là khi vào hàm sẽ tạo ra 1 bản sao của pointer trong stack, và bản sao này dù bạn có thay đổi nhưng thoát khỏi hàm thì giá trị cũng như ban đầu.
Thanks các bác , e đã đc thông não r