Bài giảng nhập môn lập trình của trường đại học công nghệ thông tin, chương 12. Bài giảng là slide powerpoint cung cấp đầy đủ kiến thức, bài tập, kỹ năng cho sinh viên về chương 12 của môn nhập môn lập trình
CON TRỎ VÀ CẤP PHÁT ĐỘNG CĐR buổi học • Sau học xong buổi học, sinh viên có khả năng: • Hiểu trỏ cấp phát động • Áp dụng trỏ cấp phát mảng • Áp dụng trỏ tham số hàm • Áp dụng trỏ cấu trúc Nội dung Cấp phát động Cấp phát động mảng chiều Cấp phát động mảng chiều Con trỏ hàm số Con trỏ cấu trúc Một số vấn đề mở rộng NMLT - CON TRỎ VÀ CẤP PHÁT ĐỘNG Cấp phát động • Cấp phát nhớ tĩnh (static memory allocation) • Khai báo biến, cấu trúc, mảng, … • Bắt buộc phải biết trước cần bao nhiều nhớ lưu trữ è tốn nhớ, khơng thay đổi kích thước, … • Cấp phát động (dynamic memory allocation) • Cần cấp phát nhiêu • Có thể giải phóng khơng cần sử dụng • Sử dụng vùng nhớ ngồi chương trình (cả nhớ ảo virtual memory) NMLT - CON TRỎ VÀ CẤP PHÁT ĐỘNG Cấu trúc CT C++ nhớ • Tồn tập tin chương trình nạp vào nhớ vùng nhớ trống, gồm phần: STACK Lưu đối tượng cục thực hàm Last-In First-Out Vùng nhớ trống HEAP Vùng cấp phát động (RAM trống nhớ ảo) Đối tượng toàn cục & tĩnh Vùng cấp phát tĩnh (kích thước cố định) Mã chương trình Gồm lệnh (kích thước cố định) NMLT - CON TRỎ VÀ CẤP PHÁT ĐỘNG Cấp phát nhớ • Cấp phát nhớ • Trong C: Hàm malloc, calloc, realloc ( ) • Trong C++: Tốn tử new • Giải phóng nhớ • Trong C: Hàm free • Trong C++: Toán tử delete NMLT - CON TRỎ VÀ CẤP PHÁT ĐỘNG Biến cấp phát động Biến tự động • Biến cục • Khai báo bên định nghĩa hàm • Sinh hàm gọi • Hủy hàm kết thúc • Thường gọi biến tự động nghĩa trình biên dịch quản lý cách tự động • Biến cấp phát động • Sinh cấp phát động • Sinh hủy chương trình chạy • Biến cấp phát động hay Biến động biến trỏ trước sử dụng cấp phát nhớ NMLT - CON TRỎ VÀ CẤP PHÁT ĐỘNG Tốn tử new • Vì trỏ tham chiếu tới biến khơng thực cần phải có định danh cho biến • Có thể cấp phát động cho biến trỏ toán tử new Toán tử new tạo biến “khơng tên” cho trỏ trỏ tới • Cú pháp: * = new Ví dụ: int *ptr = new int; o Tạo biến “không tên” gán ptr trỏ tới o Có thể làm việc với biến “không tên” thông qua *ptr NMLT - CON TRỎ VÀ CẤP PHÁT ĐỘNG Kiểm tra việc cấp phát có thành công không #include 0x34 using namespace std; 3199 int main() { 0x90 int *p = new int; ptr 0x34 if (p == NULL) { cout