Con trỏ và mảng động
Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 56 trên 56.
Thử thách
DễTạo một chương trình minh họa cách quản lý bộ nhớ động (dynamic memory management) bằng cách xây dựng hệ thống lưu trữ và xử lý số linh hoạt. Thử thách này sẽ kiểm tra mức độ hiểu của bạn về mảng động (dynamic array), cấp phát bộ nhớ (memory allocation), thao tác với mảng và giải phóng bộ nhớ đúng cách.
Chương trình sẽ nhận các đầu vào sau:
- Một số nguyên
sizebiểu thị số lượng số nguyên cần lưu trữ - Sau đó là
sizesố nguyên cần lưu trong mảng động
Chương trình của bạn cần:
- Đọc kích thước từ đầu vào
- Cấp phát động một mảng số nguyên bằng
new[]với kích thước đã cho - Đọc các số nguyên từ đầu vào và lưu vào mảng đã cấp phát động
- Tính tổng tất cả các số trong mảng
- Tìm giá trị lớn nhất trong mảng
- In kết quả theo định dạng đã chỉ định
- Giải phóng bộ nhớ đúng cách bằng
delete[]
Dùng chính xác định dạng đầu ra sau:
Array size: [size]
Sum: [sum_of_all_numbers]
Maximum: [maximum_value]Hãy nhớ rằng cấp phát bộ nhớ động cho phép bạn tạo các mảng có kích thước được xác định khi chương trình chạy, dựa trên đầu vào của người dùng. Dùng new int[size] để cấp phát mảng và truy cập các phần tử bằng cú pháp mảng array[index]. Khi dùng xong mảng, bạn phải gọi delete[] array để giải phóng bộ nhớ đã cấp phát và ngăn rò rỉ bộ nhớ. Mảng nằm trên vùng nhớ heap và sẽ tồn tại cho đến khi bạn chủ động giải phóng nó.
Tự làm thử
#include <iostream>
using namespace std;
int main() {
// Đọc kích thước của mảng
int size;
cin >> size;
// TODO: Viết code của bạn ở đây
// 1. Cấp phát động một mảng bằng new[]
// 2. Đọc các số nguyên và lưu vào mảng
// 3. Tính tổng tất cả các số
// 4. Tìm giá trị lớn nhất
// 5. Đừng quên giải phóng bộ nhớ bằng delete[]
// In ra kết quả (thay bằng các biến thực tế)
cout << "Array size: " << size << endl;
cout << "Sum: " << /* biến tổng */ << endl;
cout << "Maximum: " << /* biến giá trị lớn nhất */ << endl;
return 0;
}Tất cả bài học trong Logic và luồng chương trình
1Con trỏ và bộ nhớ
Con trỏ là gì?Toán tử lấy địa chỉToán tử giải tham chiếuCon trỏ nullCon trỏ và mảngBộ nhớ động với newGiải phóng bộ nhớ với deleteÔn tập: luyện tập về con trỏ2Vector (mảng động)
Giới thiệu std::vectorTạo vectorThêm phần tửTruy cập phần tửKích thước vectorDuyệt bằng vòng lặp forVòng lặp for dựa trên phạm viXóa phần tửÔn tập: các thao tác với vector5Dự án: Công cụ quản lý hàng tồn kho
Thiết lập dự ánThêm và cập nhật mặt hàng3Dự án: Công cụ danh sách công việc
Tổng quan dự ánThêm công việc6Tập hợp (các phần tử duy nhất)
Giới thiệu std::setTạo tập hợp và thêm phần tửKiểm tra phần tửXóa phần tửDuyệt qua tập hợpÔn tập: các số duy nhấtTự luyện tập: Trình biên dịch C++ online