Con trỏ làm tham số
Bài học 7 trên 14 trong khóa học Con trỏ trong C++ của Coddy.
Việc sử dụng hàm khi lập trình rất phổ biến. Chúng ta dùng hàm như một công cụ để thực hiện một tác vụ nhiều lần, hoặc ít nhất là để sắp xếp code và tách code thành các phần riêng biệt.
Khi truyền giá trị cho một hàm, các giá trị mà chúng ta thao tác bên trong hàm là bản sao của giá trị ban đầu. Đây là lúc việc truyền giá trị dưới dạng con trỏ cho hàm trở nên hữu ích.
void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
cout << x << " " << y << endl;
}
int main() {
int a = 10, b = 20;
cout << a << " " << b << endl;
swap(a, b);
cout << a << " " << b;
}Output:
10 20
20 10
10 20Như bạn thấy, ban đầu các giá trị vẫn bình thường. Khi truyền chúng cho hàm, chương trình tạo bản sao của các giá trị ban đầu, hoán đổi các bản sao, in ra các giá trị đã hoán đổi, rồi cuối cùng ta thấy rằng sau khi gọi hàm trong hàm main, kết quả không được giữ lại và các giá trị vẫn như cũ. Bạn có thể giải quyết vấn đề này bằng cách dùng con trỏ.
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
cout << *x << " " << *y << endl;
}
int main() {
int a = 10, b = 20;
cout << a << " " << b << endl;
swap(&a, &b);
cout << a << " " << b;
}Output:
10 20
20 10
20 10Chúng ta đã giải quyết được vấn đề. Giờ đây, thay vì truyền giá trị, chúng ta truyền địa chỉ nơi lưu các giá trị. Trong hàm, ta nhận các đối số là con trỏ chứa những địa chỉ đó. Ta tạo một số nguyên temp, nhận giá trị được giải tham chiếu từ x. Giá trị tại địa chỉ của x (cũng chính là địa chỉ của a trong hàm main()) được đổi thành giá trị của y (giá trị ban đầu tại địa chỉ của b), cuối cùng y được giải tham chiếu để nhận giá trị của temp. Vì chúng ta đã thay đổi giá trị tại các địa chỉ được cung cấp, chứ không phải các giá trị được truyền vào, nên sự thay đổi sẽ được giữ lại.
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 độ.
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 độ.
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 độ.
Thử thách
DễHoàn thiện hàm (function) Calculator để thay đổi vĩnh viễn giá trị của các biến large và small. Lấy large trừ đi hiệu giữa large và small, đồng thời nhân small với chính nó.
Đầu vào
5 3
Đầu ra
5 3
3 9
Giải thích
Lấy 5 trừ đi hiệu giữa 5 và 3, tức là 2, ta được 5 - 2 = 3. Còn nhân 3 với chính nó ta được 9.
Lưu ý: KHÔNG viết hàm main()
Tự làm thử
#include <iostream>
using namespace std;
void Calculator(// Nhận các đối số: large & small) {
// Viết code để tính toán
}
// Không viết hàm main()Tất cả bài học trong Con trỏ trong C++
Tự luyện tập: Trình biên dịch C++ online