huyenthoai (Interns) September 17, 2015, 12:52am #1
Null có ý nghĩa gì ?
ví dụ con trỏ NULL thì khác với con trỏ chưa khởi tạo như thế nào
*int p1;
*int p2 = NULL;
ltd (Lê Trần Đạt) September 17, 2015, 1:23am #2
NULL tương đương với 0
Một con trỏ mới tạo ra trỏ “linh tinh” vào một vùng nhớ nào đấy. Gán con trỏ bằng NULL để đảm bảo nó trỏ về 0. Dù 0 cũng là một vị trí không hợp lệ, nhưng mình sẽ dễ quản lý hơn là khi con trỏ trỏ về một vùng nào đó mình không biết.
Đang xem: Null là gì
Tri_Kieu (Trí Kiều) September 17, 2015, 1:11pm #3
Gio (Gió) September 17, 2015, 1:22pm #4
Một số nnlt có quy định về giá trị mặc định. Trong C/C++ để đảm bảo tối đa tốc độ thì nó không dc gán về NULL
huyenthoai (Interns) September 17, 2015, 1:40pm #5
*int p; (khai báo biến con trỏ kiểu nguyên)
int a = 5; (khai báo và khởi tạo biến a có giá trị là 5)
*int p = &a; (con trỏ p đang trỏ tới biến a)
*int p = NULL; (khai báo và khởi tạo con trỏ p trỏ tới NULL theo như anh
thangtmc73 (Trần Minh Thắng) September 17, 2015, 2:36pm #6
Nó không trỏ đến một cái gì đó rõ ràng hết. Khi build chương trình sẽ báo lỗi. Gán cho nó là NULL để dễ kiểm soát nó hơn. Ví dụ: Nếu con trỏ bằng NULL thì cấp phát động. Mình hiểu vậy.
dialongcongnghe (thienit) September 17, 2015, 2:59pm #7
Null tương đương với 0. Nhưng khác ở chỗ null trong java thì dành cho biến tham chiếu, còn 0 dành cho biến tham trị.


nhuyngo_nhuyngo95 (Nhuyngo Nhuyngo95) September 17, 2015, 3:06pm #8
Hoang_Viet (Hoàng Việt) September 17, 2015, 4:29pm #9
trình
Null không phải là nút cuối, mà là nút cuối trỏ next tiếp theo sẽ là null
nhuyngo_nhuyngo95 (Nhuyngo Nhuyngo95) September 17, 2015, 4:44pm #10
thangtmc73 (Trần Minh Thắng) September 18, 2015, 5:54am #11
thangtmc73 (Trần Minh Thắng) September 18, 2015, 5:55am #12
Hoang_Viet (Hoàng Việt) September 19, 2015, 1:55pm #13
Tai_Nguyen (Tài Nguyễn) October 19, 2015, 5:25pm #14
*p2 là giá trị chứ ,p2 ms là địa chỉ mak, e vẫn chưa hiểu *p2=NULL nghĩa là giá trị =O hay kn trỏ p2 trỏ về địa chỉ 0
tranhuanltv (Tran Huan) October 20, 2015, 3:23am #15
Đây là định nghĩa NULL trong stdio.h (VC++ 9)
/* Define NULL pointer value */ #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif
Đối với C++ thì NULL là 0, với C thì NULL là (void *)0
tcm (Người bí ẩn) December 8, 2016, 7:50am #16
Cho mình hỏi sao khi để NULL trong file.c của CodeBlocks thì nó không hiểu nhỉ ?
Mình phải để dòng #define NULL 0 ở đầu file.c nó mới hiểu, mặc dù đã #include <stdio.h>
tranhuanltv (Tran Huan) December 8, 2016, 8:46am #17
có lẽ Implement của stdio.h không có định nghĩa NULL thôi bạn, thử #include <stddef.h> xem
https://en.wikibooks.org/wiki/C_Programming/C_Reference/stddef.h
hoangthan (Breaker) October 5, 2017, 5:39pm #18
1.Như mọi người nói int *p1 = NULL là cho p1 trỏ đến NULL chứ không phải p1 nhận giá trị là NULL.
Vậy tại sao khi in địa chỉ của p1 thì nó lại ra 0(NULL) ạ ?
2 Tại sao code này không in ra kết quả là true ạ
Theo cách giải thích của một thầy giáo: “giá trị mà phead trỏ tới có thể thay đổi, nhưng giá trị của phead (địa chỉ nó trỏ tới) không thay đổi được”. Như vậy suy ra, địa chỉ của phead là NULL chứ k phải nơi mà nó trỏ tới.
Nhưng em thấy cách giải thích này vẫn chưa thỏa đáng lắm, bởi vì khi khởi tạo một linked list thì sau khi tạo một node, người ta trỏ p->pnext = NULL; rồi lại cấp phát p->pnext = ()malloc() khi cần, như vậy nếu p->pnext = NULL là địa chỉ thì cũng không hợp lí.
Cảm ơn mọi người nhiều!!
rogp10 (rogp10) October 5, 2017, 11:16pm #19
giá trị mà phead trỏ tới có thể thay đổi, nhưng giá trị của phead (địa chỉ nó trỏ tới) không thay đổi được
Đây là tính chất của truyền tham trị.
Xem thêm: At This Time Là Gì ? Cách Dùng Và Phân Biệt By The Time Là Gì
Như vậy suy ra, địa chỉ của phead là NULL chứ k phải nơi mà nó trỏ tới
Sai, do truyền tham trị nên không gán được.
Null có ý nghĩa gì ?
ví dụ con trỏ NULL thì khác với con trỏ chưa khởi tạo như thế nào
int *p1;
int *p2 = NULL;
free(NULL);, delete<> NULL; và delete NULL; (C++ gọi là nullptr) không có lỗi.
hoangthan (Breaker) October 6, 2017, 1:10am #20
Vẫn chưa thỏa mãn được những câu hỏi của em.
Xem thêm: tiểu sử fb chất
.Như mọi người nói int *p1 = NULL là cho p1 trỏ đến NULL chứ không phải p1 nhận giá trị là NULL.
Vậy tại sao khi in địa chỉ của p1 thì nó lại ra 0(NULL) ạ ? <printf(“%d”,p1);>
Nhưng em thấy cách giải thích này vẫn chưa thỏa đáng lắm, bởi vì khi khởi tạo một linked list thì sau khi tạo một node, người ta trỏ p->pnext = NULL; rồi lại cấp phát p->pnext = ()malloc() khi cần, như vậy nếu p->pnext = NULL là địa chỉ thì cũng không hợp lí.
Home Categories FAQ/Guidelines Terms of Service Privacy Policy
mister-map.com”s Discord Học C++ Free? Click Blog Dạy Nhau Học Tự Học Lập Trình