Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 7 của 7

Chủ đề: Thắc mắc về *&

  1. #1

    Thắc mắc về *&

    Anh chị chỉ giúp em *& là như thế nào ạ,
    ví dụ trong code : int enQueue(NODE *&front, NODE *&rear, int value) thì *& được sử dụng như nào, và ý nghĩa của nó là gì?[IMG]images/smilies/21.gif[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    *& trong prototype là truyền con trỏ theo kiểu tham chiếu. (lưu ý nên viết NODE* &, ko nên viết NODE *&)
    Ngoài ra là đối nhau, nhưng có thể gây segfault.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    nó cũng giống truyền 1 biến bình thường theo kiểu tham chiếu đúng không anh, chỉ khác nó là con trỏ phải không ạ??

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nguyennhunai
    nó cũng giống truyền 1 biến bình thường theo kiểu tham chiếu đúng không anh, chỉ khác nó là con trỏ phải không ạ??
    Đúng vậy.
    Trong C thì int * x trong dãy tham số mang 2 ý nghĩa: hoặc là truyền biến int theo tham chiếu, hoặc là con trỏ int* theo tham trị.
    Sau này C++ sinh thêm cái & nên đỡ.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    thankyou anh nhiều ạ [IMG]images/smilies/biggrin.png[/IMG]

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi prog10
    Đúng vậy.
    Trong C thì int * x trong dãy tham số mang 2 ý nghĩa: hoặc là truyền biến int theo tham chiếu, hoặc là con trỏ int* theo tham trị.
    Sau này C++ sinh thêm cái & nên đỡ.
    ủa mình thấy truyền con trỏ vào là nó đã lấy địa chỉ rùi mà đâu thể nào là truyền tham trị dc đâu bạn

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    con trỏ 1 chiều/cấp, 2 chiều, ... thực chất cũng chỉ là dạng số nguyên thôi. Giá trị của nó là địa chỉ mà nó trỏ tới. Muốn thay đổi địa chỉ mà con trỏ đang trỏ tới thì phải truyền theo tham chiếu.

    vd
    int* p = new int[10];
    thì p có giá trị là địa chỉ của mảng int[10] đang nằm trên heap. Vd là giá trị X.
    bây giờ p cần tăng sức chứa lên gấp đôi (20) trong hàm doubleCapacity, tức là phải gán 1 địa chỉ mới Y trên heap cho giá trị của p:
    - Nếu viết là doubleCapacity(int* ptr) thì khi gọi doubleCapacity(p); giá trị trong p ko thay đổi, vì giá trị của p được copy vào giá trị của ptr, rồi ptr mới chính là con trỏ được truyền vào hàm doubleCapacity. => p được truyền theo tham trị
    - Nếu viết là doubleCapacity(int*& ptr), khi gọi doubleCapacity(p) thì p chính là con trỏ dược truyền vào doubleCapacity. Giá trị của p có thể thay đổi.

    trong C thì 100% tham trị hết. Muốn truyền trực tiếp p vào thì phải lấy địa chỉ của p rồi truyền vào doubleCapacity, thành con trỏ 2 cấp: doubleCapacity(int** ptr); rồi thay vì chỉ cần viết ptr = ... thì phải viết *ptr = ... (đương nhiên trước đó phải giải phóng vùng int[N] cũ)

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •