Chưa hiểu được bản chất của danh sách liên kết đơn, mong được gải đáp

const ko cho phép hàm nhận x chỉnh sửa x.

ở đây truyền bản chính thì có nguy cơ hàm nhận bản chính sẽ chỉnh sửa bản chính, còn truyền bản copy thì ko sợ hàm nhận bản copy này sẽ chỉnh sửa bản chính, nhưng lại mất công copy ra bản khác. Vì vậy nên truyền bản chính. Để ko cho phép hàm nhận chỉnh sửa thì thêm const vào là xong.

1 Like

Cố gáng xem lại phần này giúp mình với @tntxtnt ơi :disappointed_relieved: Tại sao hàm TaoMotNode() là mình phải kiểm tra xem có đủ bộ nhớ để cấp phát cho p không if(p == NULL) còn hàm TaoDS thì gán Node *p = NULL lỡ không đủ bộ nhớ sao nhỉ

cái này đâu có cấp phát gì đâu mà sợ ko đủ bộ nhớ. Chừng nào có malloc hay new thì mới sợ ko đủ bộ nhớ. Gán NULL cho 1 con trỏ thì tương tự gán 0 cho 1 integer vậy, đâu có cấp phát bộ nhớ gì.

vậy bạn cho mình hỏi cái này, mình chưa hiểu về cái vụ cấp phát động với khai báo con trỏ cho lắm :frowning:
*Node p;
*Node p = new Node;
*Node p= new Node[5];
3 cái này khác nhau như thế nào?

Node *p; là khai báo con trỏ, ko biết nó trỏ tới đâu (ko gán giá trị nào cho con trỏ hết)
Node *p = new Node; là cấp phát bộ nhớ vừa đủ cho 1 Node, rồi gán địa chỉ của Node vừa được cấp phát cho p.
Node *p = new Node[5]; là cấp phát bộ nhớ vừa đủ cho 5 Node liên tục, rồi gán địa chỉ của Node đầu tiên trong 5 Node vừa được cấp phát cho p.

nếu ko gán con trỏ cho giá trị nào thì khi deref nó (gọi *p) có thể cho ra kết quả bất kì, có thể ko báo lỗi, có thể báo lỗi, trong khi phải là lỗi 100%. Vì vậy nên luôn luôn gán NULL cho con trỏ chưa xác định là trỏ tới đâu, để lỡ deref nó thì nó báo lỗi liền.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?