[Buổi 19][Con trỏ][HW] Bài 1: Swap qua con trỏ
Swap qua con trỏ
Bối cảnh
Một chương trình điều khiển có hai biến trạng thái cần đổi giá trị cho nhau thông qua hàm nhận pointer. Về mặt kết quả, bài toán chỉ là swap hai số, nhưng mục tiêu của B19 là nhìn rõ cơ chế: hàm không nhận bản sao của hai biến mà nhận địa chỉ của chúng; khi dereference và gán, vùng nhớ của biến gốc trong main thay đổi trực tiếp.
Homework Easy này cố ý không dùng std::swap hay reference để người học thực hành chính xác chuỗi &variable → pointer parameter → *pointer. Sau khi hoàn thành, học viên phải giải thích được vì sao thay đổi trong hàm vẫn tồn tại khi hàm kết thúc và vì sao pointer phải trỏ đến một địa chỉ hợp lệ trước khi dereference.
Yêu cầu
- Viết hàm nhận
long long* a, long long* b. - Đổi giá trị tại hai địa chỉ.
- In hai số sau swap.
Input
Hai số nguyên a b.
Output
Hai số sau khi đổi chỗ.
Ràng buộc
|a|,|b| ≤ 10^18.
Ví dụ 1
Input
1 2
Output
2 1
Giải thích
Ban đầu x=1, y=2. Pointer thứ nhất trỏ tới x và pointer thứ hai trỏ tới y. Biến tạm giữ 1; *a=*b làm x thành 2; *b=temp làm y thành 1. Vì thao tác ghi trực tiếp lên biến gốc, output là 2 1.
Ví dụ 2
Input
-5 7
Output
7 -5
Giải thích
Với x=-5, y=7, cùng ba bước swap qua dereference đưa 7 vào vùng nhớ của x và -5 vào vùng nhớ của y. Dấu âm chỉ là giá trị dữ liệu, không làm thay đổi cơ chế pointer, nên output là 7 -5.
Thông tin học tập
- Module: M06
- Buổi: B19
- Loại bài: HOMEWORK
- Độ khó: Easy
- Concepts: pointers, dereference, functions, mutation
- Giới hạn kiến thức: B01-B19
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments