Menu
CoddyTech

Sửa đổi biến qua con trỏ

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 27 trên 63.

Giờ đây, bạn có thể tận dụng sức mạnh thực sự của con trỏ: thay đổi biến gốc thông qua một hàm. Khi truyền con trỏ cho một hàm, hàm có thể dùng toán tử giải tham chiếu để thay đổi giá trị được lưu tại địa chỉ bộ nhớ đó.

Bên trong hàm, bạn giải tham chiếu con trỏ bằng toán tử * để truy cập và thay đổi giá trị của biến ban đầu. Kỹ thuật này được gọi là truyền tham chiếu vì bạn truyền tham chiếu đến vị trí của biến trong bộ nhớ.

void doubleValue(int *ptr) {
    *ptr = *ptr * 2;  // Giải tham chiếu để thay đổi giá trị ban đầu
}

int main() {
    int x = 5;
    doubleValue(&x);  // Truyền địa chỉ của x
    // x giờ là 10!
    return 0;
}

Mấu chốt là dùng *ptr ở vế trái của phép gán để thay đổi giá trị tại địa chỉ bộ nhớ mà con trỏ lưu giữ. Nhờ vậy, các hàm có thể thay đổi vĩnh viễn các biến từ hàm gọi, mở ra những khả năng lập trình mạnh mẽ mà cách truyền đối số theo giá trị đơn thuần không thể mang lại.

challenge icon

Thử thách

Dễ

Viết chương trình C minh họa cách thay đổi biến thông qua con trỏ (pointer) bằng cách tạo một hàm (function) nhân giá trị của một số nguyên (integer) với 3.

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

  1. Tạo hàm có tên tripleValue, nhận con trỏ đến một số nguyên làm tham số
  2. Bên trong hàm tripleValue, dùng toán tử giải tham chiếu để nhân giá trị tại địa chỉ bộ nhớ với 3
  3. Bên trong hàm tripleValue, in giá trị mới theo định dạng: Value tripled to: [value]
  4. Trong hàm main, khai báo biến số nguyên có tên number và khởi tạo biến với giá trị 8
  5. In giá trị ban đầu theo định dạng: Original value: [value]
  6. Gọi hàm tripleValue và truyền địa chỉ của biến number bằng toán tử lấy địa chỉ
  7. Sau khi gọi hàm, in giá trị cuối cùng của number theo định dạng: Final value: [value]

Đầu ra của bạn cần cho thấy hàm thay đổi thành công biến ban đầu thông qua con trỏ:

Original value: 8
Value tripled to: 24
Final value: 24

Thử thách này minh họa sức mạnh của cách truyền tham chiếu bằng con trỏ. Hàm có thể thay đổi vĩnh viễn biến ban đầu bằng cách giải tham chiếu con trỏ và thay đổi giá trị tại vị trí bộ nhớ đó.

Tự làm thử

#include <stdio.h>

// TODO: Viết hàm tripleValue tại đây

int main() {
    // TODO: Viết code tại đây
    // Khai báo và khởi tạo biến number
    // In ra giá trị ban đầu
    // Gọi hàm tripleValue
    // In ra giá trị cuối cùng
    
    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