Menu
CoddyTech

Con trỏ null

Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 4 trên 56.

Khi khai báo một con trỏ, nó không tự động trỏ đến thứ gì có ý nghĩa. Con trỏ chưa được khởi tạo chứa các địa chỉ bộ nhớ ngẫu nhiên, có thể gây ra lỗi nghiêm trọng nếu bạn cố sử dụng nó. Đây là lúc con trỏ null trở nên thiết yếu để lập trình an toàn.

Con trỏ null là con trỏ chỉ rõ rằng nó không trỏ đến đâu cả. Trong C++ hiện đại, bạn tạo con trỏ null bằng cách khởi tạo nó với nullptr:

int* ptr = nullptr;  // ptr hiện là con trỏ null

Từ khóa nullptr cho biết con trỏ không trỏ đến vị trí bộ nhớ hợp lệ nào. Cách này an toàn hơn nhiều so với việc để con trỏ chưa được khởi tạo, vì bạn có thể kiểm tra xem con trỏ có phải là null hay không trước khi thử giải tham chiếu nó.

Trước khi dùng bất kỳ con trỏ nào, bạn nên kiểm tra xem nó có phải là null bằng một câu lệnh if đơn giản hay không:

if (ptr != nullptr) {
    // Bạn có thể dùng *ptr ở đây một cách an toàn
    int value = *ptr;
}

Bài luyện tập này giúp chương trình của bạn không bị dừng đột ngột do truy cập vào vị trí bộ nhớ không hợp lệ. Luôn khởi tạo con trỏ bằng nullptr khi khai báo, và kiểm tra xem con trỏ có phải là null hay không trước khi giải tham chiếu.

challenge icon

Thử thách

Dễ

Tạo một chương trình minh họa cách sử dụng con trỏ an toàn bằng cách kiểm tra con trỏ null trước khi giải tham chiếu chúng.

Đầu vào sẽ gồm:

  • Một chuỗi có giá trị là "valid" hoặc "null"

Chương trình của bạn cần:

  1. Khai báo một biến số nguyên tên là data và khởi tạo biến với giá trị 42
  2. Khai báo một con trỏ tên là ptr
  3. Nếu đầu vào là "valid", gán địa chỉ của data cho ptr
  4. Nếu đầu vào là "null", gán nullptr cho ptr
  5. Dùng câu lệnh if để kiểm tra ptr khác null trước khi sử dụng
  6. Nếu con trỏ khác null, in ra giá trị mà con trỏ trỏ đến
  7. Nếu con trỏ là null, in ra thông báo an toàn

Dùng định dạng đầu ra chính xác sau:

Value: [value]

Với con trỏ null, dùng định dạng này:

Pointer is null - cannot dereference

Tự làm thử

#include <iostream>
#include <string>
using namespace std;

int main() {
    // Đọc đầu vào (input)
    string input;
    cin >> input;
    
    // Khai báo biến (variable) data
    int data = 42;
    
    // TODO: Viết code của bạn ở đây
    // Khai báo con trỏ tên là ptr
    // Kiểm tra đầu vào và gán giá trị (value) phù hợp cho ptr
    // Dùng câu lệnh if để kiểm tra và sử dụng con trỏ một cách an toàn
    
    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 chương trình

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