[Buổi 19][Con trỏ][HW] Bài 2: Cập nhật qua pointer
Cập nhật qua pointer
Bối cảnh
Một biến số dư tài khoản được cập nhật bởi hàm nhận pointer đến số dư và một lượng thay đổi delta. Bài toán nhỏ này mô phỏng tình huống một hàm dịch vụ cần sửa trực tiếp state của caller: nếu delta dương thì số dư tăng, nếu delta âm thì giảm. Không có copy-back thủ công; mọi thay đổi xảy ra tại địa chỉ mà pointer đang giữ.
Mục tiêu là củng cố dereference ở phía ghi dữ liệu. Người học cần phân biệt p += delta — phép toán trên địa chỉ — với *p += delta — phép toán trên giá trị tại địa chỉ. Homework vẫn giữ thuật toán O(1) để tập trung hoàn toàn vào semantics của pointer và side effect.
Yêu cầu
- Viết
apply(long long* p, long long delta). - Nếu p khác nullptr, cộng delta vào *p.
- In giá trị mới.
Input
Hai số balance delta.
Output
Một số là balance mới.
Ràng buộc
|balance|,|delta| ≤ 10^15.
Ví dụ 1
Input
100 25
Output
125
Giải thích
Giá trị ban đầu là 100 và delta=25. Pointer trỏ tới biến 100; lệnh *p += 25 ghi lại 125 vào đúng vùng nhớ đó. Sau khi hàm trả về, biến ở main đã mang giá trị mới nên output là 125.
Ví dụ 2
Input
100 -50
Output
50
Giải thích
Giá trị ban đầu 100, delta=-50. Dereference lấy đúng biến gốc rồi cộng số âm, tương đương trừ 50. State cuối là 50 và output 50; không có pointer arithmetic nào diễn ra.
Thông tin học tập
- Module: M06
- Buổi: B19
- Loại bài: HOMEWORK
- Độ khó: Easy
- Concepts: pointers, nullptr, functions, dereference
- Giới hạn kiến thức: B01-B19
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments