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.