Menu
CoddyTech

Con trỏ NULL

Thuộc phần Logic và luồng điều khiển trong hành trình C của Coddy. Bài học 5 trên 63.

Đôi khi bạn cần khai báo một con trỏ nhưng chưa có địa chỉ bộ nhớ hợp lệ để gán cho nó ngay. Trong những trường hợp này, bạn cần khởi tạo con trỏ bằng một giá trị đặc biệt có tên là NULL.

Con trỏ NULL là con trỏ không trỏ đến địa chỉ bộ nhớ hợp lệ nào. Trong C, NULL thường được định nghĩa là 0 hoặc (void*)0. Khi khởi tạo con trỏ bằng NULL, bạn đang nêu rõ rằng hiện tại nó không trỏ đến bất kỳ thứ gì hữu ích.

int *ptr = NULL;    // Khởi tạo con trỏ với NULL
printf("%p", ptr);  // Lệnh này sẽ in ra 0 hoặc (nil)

Khởi tạo con trỏ bằng NULL được xem là một thực hành lập trình tốt vì việc này ngăn con trỏ chứa các giá trị rác ngẫu nhiên. Một con trỏ chưa được khởi tạo có thể chứa bất kỳ địa chỉ bộ nhớ ngẫu nhiên nào, dẫn đến hành vi không thể đoán trước nếu bạn vô tình sử dụng nó.

Bạn có thể kiểm tra xem con trỏ có phải là NULL hay không trước khi sử dụng, điều này giúp ngăn chương trình bị lỗi và làm cho code của bạn đáng tin cậy hơn. Việc kiểm tra an toàn này càng quan trọng khi chương trình của bạn trở nên phức tạp hơn.

challenge icon

Thử thách

Dễ

Viết chương trình C minh họa cách khởi tạo và kiểm tra con trỏ NULL đúng cách. Chương trình của bạn cần:

  1. Khai báo con trỏ đến số nguyên có tên safe_ptr và khởi tạo nó thành NULL
  2. Khai báo con trỏ đến ký tự có tên char_ptr và khởi tạo nó thành NULL
  3. Kiểm tra xem safe_ptr có phải là NULL hay không bằng câu lệnh if và in ra "safe_ptr is NULL" nếu đúng
  4. Kiểm tra xem char_ptr có phải là NULL hay không bằng câu lệnh if và in ra "char_ptr is NULL" nếu đúng
  5. In địa chỉ bộ nhớ được lưu trong safe_ptr bằng printf với định dạng %p
  6. In địa chỉ bộ nhớ được lưu trong char_ptr bằng printf với định dạng %p

Đầu ra của bạn cần hiển thị kết quả theo định dạng sau:

safe_ptr is NULL
char_ptr is NULL
safe_ptr address: [address]
char_ptr address: [address]

Địa chỉ bộ nhớ thực tế sẽ hiển thị là 0, (nil) hoặc một cách biểu diễn NULL tương tự, tùy thuộc vào hệ thống của bạn, nhưng định dạng và nhãn phải khớp chính xác như trên.

Tự làm thử

#include <stdio.h>

int main() {
    // TODO: Viết code của bạn ở đây
    // Khai báo và khởi tạo các con trỏ
    // Kiểm tra xem các con trỏ có bằng NULL không
    // In ra đầu ra theo yêu cầu
    
    return 0;
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch C online