Menu
CoddyTech

Truyền con trỏ vào hàm

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

Giờ bạn đã hiểu những hạn chế của cách truyền tham trị, hãy cùng tìm hiểu cách truyền con trỏ cho hàm giải quyết vấn đề này. Thay vì truyền bản sao giá trị của một biến, bạn có thể truyền địa chỉ bộ nhớ của biến đó cho hàm.

Khi bạn truyền một con trỏ vào hàm, hàm sẽ truy cập được vị trí của biến gốc trong bộ nhớ. Điều này có nghĩa là hàm có thể thao tác trực tiếp với dữ liệu gốc, chứ không chỉ với bản sao.

void processValue(int *ptr) {
    // ptr chứa địa chỉ của biến ban đầu
    // Giờ hàm (function) có thể truy cập vị trí bộ nhớ đó
}

int main() {
    int x = 10;
    processValue(&x);  // Truyền địa chỉ của x
    return 0;
}

Hãy chú ý cách chúng ta dùng toán tử lấy địa chỉ (address-of operator) & khi gọi hàm để truyền địa chỉ của biến. Tham số của hàm được khai báo là int *ptr, cho biết hàm mong đợi nhận một con trỏ đến số nguyên. Kỹ thuật cơ bản này mở ra nhiều khả năng mạnh mẽ để các hàm tương tác với dữ liệu trong chương trình của bạn.

challenge icon

Thử thách

Dễ

Viết một chương trình C minh họa cách truyền con trỏ vào hàm. Chương trình của bạn cần:

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

Đầu ra của bạn cần cho thấy hàm nhận và truy cập thành công địa chỉ bộ nhớ của biến ban đầu:

Original value: 42
Value at address: 42
Function call completed

Thử thách này giới thiệu khái niệm cơ bản về cách truyền con trỏ vào hàm, cho phép hàm truy cập vị trí bộ nhớ của biến ban đầu thay vì làm việc với một bản sao giá trị của biến đó.

Tự làm thử

#include <stdio.h>

// TODO: Viết hàm (function) displayValue ở đây

int main() {
    // TODO: Viết code ở đây
    // 1. Khai báo và khởi tạo biến number
    // 2. In ra giá trị ban đầu
    // 3. Gọi hàm displayValue
    // 4. In ra thông báo hoàn tất
    
    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