Hỏi về cấu trúc lệnh trong môn cấu trúc dữ liệu và giải thuật
đây là đoạn code về link list mà lên google gõ ra rất nhiều ,
https://codeshare.io/5R8Wbj
và e có rất nhiều câu hỏi về đoạn code này ,mong mn giúp đỡ ,em học c++ cũng khá .
thứ 1: hàm Getnode ở dòng 14 nó có khác gì hàm Getnode ko hay đơn giản chỉ là khác biệt kiểu trả về
thứ 2: ở dòng 26 khai báo Node p_new thì nó là 1 con trỏ và *p_new sẽ có thành phần là int data và Node *pnext phải ko ạ ,và *p_new sẽ trỏ tới 1 giá trị khác ,cụ thể là NULL??, p_new đc goi là 1 nốt mới hay chỉ đơn giản gọi là con trỏ ,cái này e thắc mắc nhất ?
thứ 3: lệnh l.phead ở dòng 28 nó sẽ lấy về giá trị của con trỏ phead phải ko ạ,vậy tại sao nó ko phải = &(*p_new) mà lại là = p_new
thứ 4: code này chạy báo lỗi Exception thrown: read access violation.
i was 0xDDDDDDDD.
If there is a handler for this exception, the program may be safely continued.
thật là biết ởn cuộc đời nếu như e được giải thich hết thắc mắc trên
Thật sự không có hàm tên là
*Getnode
.[quote=“vinhthang, post:1, topic:57484”]*p_new đc goi là 1 nốt mới hay chỉ đơn giản gọi là con trỏ thôi.
[/quote]
Con trỏ đúng lí ngoài những chỗ đã trỏ thì chỉ có thể trỏ vào NULL.
Thớt về xem lại phần con trỏ.
tra lời cụ thể được ko anh nói vậy ko hiêu được
có ai ko ạ ,anh đạt vào giải thích 1 cách chi tiết từng vấn đề em hỏi được ko ạ
Mình thấy anh ấy trả lời rất dễ hiểu.
Tên hàm chỉ có thể là
Getnode
, còn kiểu trả về làNode *
.1 con trỏ bất kì hoặc trỏ vào 1 chỗ nào đó, hoặc chẳng trỏ vào chỗ nào cả (NULL). Giống như người ta hỏi “nhà bạn ở đâu”, bạn sẽ chỉ tay vào 1 nhà nào đó cụ thể, hoặc bạn trỏ tay vào bãi đất trống (NULL).
Câu này dễ hiểu nhất.
cái này chỉ đúng cho hàm thôi hay sao a
vd khac: int *p thì int là kieu trả về chứ đâu phải int*
Nếu trả về Node thì tức là trả về rvalue, mà một giá trị tạm không thể lưu trữ nên phải trả về Node* mới đúng, vì con trỏ mới là tạm còn nó trỏ tới một node tồn tại hết chương trình.
Vẫn là
int*
.giá trị tạm ko thể lưu trữ là sao ạ
Xem ở đây nhé. https://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c
Có thể nói, không hiểu rõ lvalue với rvalue của C++ (C++11: move semantic) thì không thể gọi là “sạch nước cản” được
Bạn biết tại sao mình cực kỳ ghét các sách cũ thường ghi là
int *a
không? Vì nếu như bạn đã quen với một ngôn ngữ quản lý kiểu dữ liệu cực kỳ chặt chẽ như C#, bạn sẽ thấy cực kỳ ngứa mắt, và sửa ngay lại thànhint* a
. Khi khai báo như thế,a
là một biến có kiểu dữ liệu làint*
Đây là cú pháp khai báo của C# nè (Có thể không chính xác nhưng đại loại thế)
Ngoài ra, còn có kiểu dữ liệu cấp 2
int**, int[][], int*[], int[]*
, bên C# còn có cả kiểu dữ liệu cấp 1 nhưng nhiều chiều (mảng 2 chiều không phải là mảng chứa mảng nhé)Một điều ít người học để ý là:
Đọc về con trỏ tại đây
Learn C++ – 11 Jul 07
6.7 — Introduction to pointers
In lesson 1.3 — a first look at variables, we noted that a variable is a name for a piece of memory that holds a value. When our program instantiates a variable, a free memory address is auto…
Họ sẽ dạy bạn nên dùng style code nào khi khai báo con trỏ.