Null có nghĩa là gì trong lập trình máy tính?

1. Null values cùng null pointer (Giá trị null và con trỏ null)

Giống như các biến thông thường, nhỏ trỏ cũng ko được khởi chế tác khi bọn chúng được thể hiện/khai báo (instantiated). Trừ khi gồm một quý hiếm được gán, còn nếu như không thì nhỏ trỏ đã trỏ đến một số địa chỉ rác theo khoác định.

Bạn đang xem: Null có nghĩa là gì trong lập trình máy tính?

Ngoài showroom bộ ghi nhớ ra, còn có một cực hiếm khác mà bé trỏ có thể giữ: đó là giá trị null. Cực hiếm null là một giá trị đặc biệt, có ý nghĩa sâu sắc là bé trỏ dường như không trỏ đến bất kể thứ gì. Một bé trỏ cất giá trị null được gọi là bé trỏ null.

Trong C++, bạn có thể gán cực hiếm null cho một nhỏ trỏ bằng phương pháp khởi sản xuất hoặc gán đến nó giá trị bằng 0.

float *ptr 0 ; // ptr is now a null pointer float *ptr2; // ptr2 is uninitializedptr2 = 0; // ptr2 is now a null pointer
Con trỏ sẽ gửi thành boolean false nếu chúng null, và boolean true nếu bọn chúng không null. Vị đó, chúng ta có thể sử dụng một câu lệnh kiểm tra điều kiện để khám nghiệm liệu rằng một con trỏ có null tốt không:


double *ptr 0 ; // pointers convert to lớn boolean false if they are null, & boolean true if they are non-nullif (ptr) std::cout thực hành tốt: Hãy khởi tạo con trỏ với một giá trị null nếu như bạn đang ko gán quý hiếm nào mang đến chúng.

2. Dereferencing một nhỏ trỏ null

Trong bài bác trước, bọn họ đã biết rằng câu hỏi dereferencing một nhỏ trỏ rác đã dẫn mang đến các công dụng không xác định. Việc dereferencing một bé trỏ null cũng sẽ dẫn đến lỗi hành động không khẳng định (undefined behavior). Trong hầu hết các ngôi trường hợp, nó sẽ làm ứng dụng của khách hàng bị crash.

Về phương diện khái niệm, điều đó thật sự bao gồm ý nghĩa. Vấn đề dereferencing một bé trỏ có nghĩa là “đi đến showroom mà bé trỏ đã trỏ cho tới và truy cập vào quý giá ở đó”. Với một con trỏ null thì giữ địa chỉ cửa hàng nào bên trong nó. Bởi thế, hãy thử nghĩ xem, lúc bạn nỗ lực truy cập giá trị tại địa chỉ đó, nhỏ trỏ cần làm vậy nào đây? ☺

3. Null macro

Giải thích macro là gì: Một macro là một đoạn code đã làm được đặt tên. Bất cứ lúc nào tên này được sử dụng, nó đã được sửa chữa thay thế bằng nội dụng của macro. Có hai loại macro. Chúng khác nhau chủ yếu sinh sống về vẻ ngoài khi bọn chúng được sử dụng. Những macro như thể như đối tượng (Object-like macros) thì kiểu như với các đối tượng dữ liệu khi được sử dụng, các macro như là hàm (Function-like macro) thì như là với những lời hotline hàm.

Quay quay trở về với con trỏ, để ý rằng quý giá 0 không phải là 1 trong những kiểu dữ liệu con trỏ, cho nên vì vậy việc gán 0 (hoặc NULL, trước C++ 11) mang lại một con trỏ để bộc lộ rằng nó là con trỏ null trong khi gây ra sự không tốt nhất quán. Trong một trong những trường hợp hiếm, khi được áp dụng làm đối số theo nghĩa đen, nó thậm chí hoàn toàn có thể gây ra sự cố vì chưng trình biên dịch quan trọng hiểu được họ đangmuốn nói đến một nhỏ trỏ null tuyệt số nguyên 0.


#include // for NULL double *ptr NULL ; // ptr is a null pointer
Trong trường hợp có công dụng NULL được tư tưởng là quý hiếm 0, khi thực hiện print(NULL) thực chất sẽ là call print(int), chứ chưa phải print(int*) như chúng ta vẫn ý muốn đợi đối với một con trỏ null đúng nghĩa.

4. Nullptr vào C++ 11

Để giải quyết vấn đề ở bên trên, C++ 11 đã giới thiệu 1 từ bỏ khóa new gọi là nullptr. Nullptr vừa là một trong những từ khóa, cùng vừa là 1 trong những giá trị hằng rvalue, y hệt như các từ bỏ khóa boolean là true cùng false.

Bắt đầu từ C++ 11, nullptr sẽ tiến hành ưu tiên hơn cầm cố cho 0 khi chúng ta muốn có một con trỏ null:

/*** Cafedev.vn - Kênh tin tức IT bậc nhất Việt Nam**
author cafedevn* Contact: cafedevn
Vn* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/*/#include #include // for NULL void print(int x){std::cout C++ sẽ ngầm định đổi khác nullptr thành ngẫu nhiên kiểu dữ liệu con trỏ nào. Do vậy, trong lấy ví dụ như trên, nullptr sẽ được thay đổi ngầm định thành một con trỏ phong cách nguyên, và tiếp nối giá trị của nullptr được gán đến ptr. Điều này có tác dụng làm cho bé trỏ thứ hạng nguyên ptr thay đổi một bé trỏ null.

Chúng ta cũng hoàn toàn có thể gọi một hàm với tự khóa nullptr có tác dụng tham số, nó đang khớp với bất kỳ đối số truyền vào như thế nào của hàm nhưng mà nhận vào trong 1 giá trị con trỏ:

int *ptr nullptr ; // note: ptr is still an integer pointer, just set to a null value
Thực hành tốt: với C++ 11, hãy sử dụng từ khóa nullptr để có thể tạo con trỏ với một giá trị null.

5. Std::nullptr_t trong C++11

C++ 11 cũng reviews một kiểu tài liệu mới hotline là std::nullptr_t (trong header ). Std::nullptr_t chỉ rất có thể giữ một giá trị: chính là nullptr! mặc dù điều này có vẻ hơi ngớ ngẩn, dẫu vậy nó lại bổ ích trong một trong những tình huống. Nếu họ muốn viết một hàm mà lại chỉ thừa nhận vào đối số nullptr, vậy họ sẽ thiết lập kiểu dữ liệu nào mang lại đối số của hàm? Câu trả lời đó là std::nullptr_t.

/*** Cafedev.vn - Kênh tin tức IT bậc nhất Việt Nam**
author cafedevn* Contact: cafedevn
Vn* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/*/#include void print(int x){std::cout gồm lẽ các bạn sẽ không bao giờ cần phải áp dụng tới nó, nhưng câu hỏi biết thêm về một kỹ năng và kiến thức mới chưa lúc nào là ko tốt!

khóa đào tạo Lập trình thiết kế C++ khóa đào tạo và huấn luyện lập trình C++ căn bạn dạng Con trỏ NULL trong C++ (NULL pointers)
*

Dẫn nhập

Ở bài học trước, mình đã share cho chúng ta về bé TRỎ CƠ BẢN vào C++(Pointer). Một số ý thiết yếu mà bạn cần nắm: con trỏ là đổi thay chứa địa chỉ bộ nhớ, hoàn toàn có thể được truy hỏi cập bằng cách sử dụng toán tử dereference (*). Truy vấn một bé trỏ rác có thể sụp đổ áp dụng của bạn.

Hôm nay, chúng ta sẽ cùng tìm hiểu về có mang Con trỏ NULL vào C++ (NULL pointers).

Xem thêm: Ah Là Gì? Các Thông Số Trên Bình Ắc Quy Có Ý Nghĩa Gì? Chỉ Số Ah Trên Ắc Quy Là Gì

Nội dung

Để đọc hiểu bài bác này tốt nhất các bạn nên có kiến thức và kỹ năng cơ bản về:

Trong bài xích ta sẽ cùng tìm hiểu các vấn đề:

Giá trị null và nhỏ trỏ null (Null values và null pointers)Truy cập bé trỏ null
Macro NULLnullptr trong C++11

Giá trị null và con trỏ null

Tương tự như các biến thông thường, nhỏ trỏ không được khởi tạo thành khi khai báo. Nếu bé trỏ ko được khởi tạo ra một giá chỉ trị, chúng sẽ chứa giá trị rác.

Ngoài địa chỉ vùng nhớ, bao gồm một cực hiếm mà nhỏ trỏ rất có thể giữ được, kia là giá trị null. Null là một cực hiếm đặc biệt, điều đó có nghĩa là con trỏ đó chưa trỏ đến địa chỉ nào cả. Con trỏ đang dữ giá trị null được điện thoại tư vấn là bé trỏ null (null pointer).

float *ptr 0 ; // ptr là một con trỏ nullfloat *ptr2; // ptr2 là bé trỏ rácptr2 = 0; // ptr2 là một trong con trỏ null
Ta hoàn toàn có thể sử dụng một đk để kiểm tra xem một bé trỏ bao gồm null xuất xắc không:double *ptr 0 ;// con trỏ sẽ chuyển thành true giả dụ nó null, với false trường hợp nó ko nullif (ptr)cout Output: bé trỏ null.

Chú ý: Nên khởi tạo con trỏ là null nếu nó vẫn chưa trỏ cho một add cụ thể làm sao khác.

Truy cập con trỏ null

Trong bài học trước, chúng ta đã hiểu rằng việc truy vấn một con trỏ rác đang dẫn đến kết quả không xác định. Ví như truy xuất giá trị của bé trỏ null, chương trình rất có thể bị đóng vì chưng hệ điều hành.

Macro NULL

Ngôn ngữ C (không nên C++) quan niệm một macro tiền xử lý đặc biệt được hotline là NULL, nó có giá trị 0.

#define NULL 0Mặc cho dù đây chưa phải là một phần kỹ thuật của C++, nhưng nó chuyển động phổ thay đổi trong những trình biên dịch C++:

double *ptr = NULL; // ptr là một trong những con trỏ null
Tuy nhiên, về khía cạnh kỹ thuật, macro NULL chưa phải là nghệ thuật trong C++, vì chưng vậy nên tránh sử dụng nó trong C++.

nullptr trong C++11

Lưu ý rằng giá trị của 0 ko phải là 1 trong những kiểu con trỏ, vì thế gán 0 cho một bé trỏ để thể hiện rằng bé trỏ là một trong những con trỏ null là không độc nhất quán.

#include using namespace std;void do
Something(double *ptr){// ptr sẽ chuyển thành true ví như nó null, cùng false giả dụ nó không nullif (ptr)std::cout Để xử lý những sự việc này, C++11 trình làng một từ khóa mới mang tên nullptr. nullptr là một hằng số rvalue, giống hệt như các từ khóa boolean true false.

int *ptr = nullptr; // ptr là một trong những con trỏ nulldo
Something(nullptr); // truyền bé trỏ null vào hàm
Ngoài ra, C++11 còn tư tưởng một kiểu dữ liệu nullptr_t, nullptr_t chỉ có thể lưu trữ quý hiếm nullptr. Dẫu vậy nó hay chỉ được sử dụng trong số những trường đúng theo hiếm hoi, chúng ta hãy xem thêm và chia sẽ vào comment dưới nhé.

Kết luận

Qua bài học kinh nghiệm này, các bạn đã cụ được cơ bản về bé trỏ NULL trong C++ (NULL pointers). để ý rằng ta buộc phải khởi tạo nhỏ trỏ là null nếu nó chưa trỏ cho một add cụ thể nào khác nhé.

Trong bài tiếp theo, bản thân sẽ trình làng cho chúng ta về những vụ việc xung quanh nhỏ TRỎ & MẢNG trong C++(Pointers and arrays).

Cảm ơn chúng ta đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bản thân để vạc triển bài viết tốt hơn. Đừng quên “Luyện tập – thử thách – không phải lo ngại khó”.

Thảo luận

Nếu bạn có bất kỳ khó khăn hay vướng mắc gì về khóa học, đừng e dè đặt thắc mắc trong phần BÌNH LUẬN dưới hoặc trong mục HỎI & ĐÁP trên tủ sách anhhung.mobi.com để nhận ra sự hỗ trợ từ cùng đồng.