gán NULL cho con trỏ nghĩa là con trỏ đó ko trỏ tới vùng nhớ nào cả. Em thấy khó hiểu cũng đúng. Giống như số 0 ấy, người La Mã ko có chữ cái cho số 0 vì 0 nghĩa là ko có gì cả làm sao thể hiện nó được? Người châu Âu cũng phải vay mượn từ dân Ả Rập mới có số 0. Tương tự con trỏ cũng vậy, ko trỏ tới cái gì thì giá trị của nó sẽ là gì? C cho NULL là 0, nhưng thực chất NULL ko phải là số nguyên 0, vì 0 là số nguyên, còn NULL là con trỏ, hơn nữa nó là con trỏ đặc biệt ko trỏ tới đâu cả.
C++11 thì có nullptr
, là giá trị của con trỏ khi nó ko trỏ tới đâu hết. nullptr
có kiểu giá trị là nullptr_t
, là kiểu con trỏ ko trỏ tới đâu cả. Kiểu này chỉ có 1 giá trị duy nhất là nullptr
. Nhiều ngôn ngữ khác cũng xác định kiểu mà chỉ có 1 giá trị duy nhất là cho con trỏ đặc biệt này. Nói vậy để em thấy NULL/null/nil/nullptr là 1 giá trị rất đặc biệt.
C/C++ coi NULL/nullptr là false
, do kiểu con trỏ có thể ép kiểu thành boolean. Đây có thể là 1 sai lầm của C/C++. Trong các ngôn ngữ hướng đối tượng khác như Java/C# thì null
ko phải là false
. false
nghĩa là giá trị “sai”, còn null
là ko có đối tượng nào cả, nên ko thể so sánh cái có thật với cái hư vô được.