Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 58 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
58
Dung lượng
1,36 MB
Nội dung
CON TRỎ POINTER CĐR buổi học • Sau học xong buổi học, sinh viên có khả năng: • • • Hiểu khái niệm trỏ, địa biến quản lý biến C++ Sử dụng trỏ lập trình Biết số thuật ngữ tiếng Anh tương ứng Bảng thuật ngữ Việt- Anh liên quan nội dung trỏ Thuật ngữ tiếng Việt Thuật ngữ tiếng Anh Con trỏ Pointer Hằng trỏ Constant pointer Địa nhớ Memory Address Toán tử & Address-of Operator Toán tử * Dereferencing Operator, or: Indirection Operator Cấp phát nhớ Memory Allocation Giải phóng nhớ De-Allocate Memory Cấp phát tĩnh Static Memory Allocation Cấp phát động Dynamic Memory Allocation Biến động Dynamic Variable Phép toán số học trỏ Pointer Arithmetic NMLT - CON TRỎ CƠ BẢN Nội dung Khái niệm cách sử dụng trỏ Con trỏ mảng chiều Bài tập NMLT - Con trỏ cấp phát động Khái niệm cách sử dụng 1.1 Biến vùng nhớ 1.2 Khái niệm trỏ 1.3 Khai báo trỏ 1.4 Con trỏ toán tử &, * 1.5 Con trỏ NULL 1.6 Kích cỡ trỏ 1.7 Từ khóa const trỏ 1.8 Con trỏ hàm Bài tập Một số lưu ý NMLT - CON TRỎ CƠ BẢN ? Chương trình C/C++ quản lý biến nào? NMLT - CON TRỎ CƠ BẢN 1.1 Biến vùng nhớ • Bộ nhớ máy tính • Bộ nhớ RAM chứa nhiều ô nhớ, nhớ có kích thước byte • Mỗi nhớ có địa địa đánh số từ trở • RAM để lưu trữ mã chương trình liệu suốt q trình thực thi Địa nhớ … byte Memory Layout (bytes) NMLT - CON TRỎ CƠ BẢN 1.1 Biến vùng nhớ • Khi khai báo biến, máy tính dành riêng vùng nhớ để lưu biến • Khi tên biến gọi, máy tính thực bước sau: • Tìm kiếm địa nhớ biến • Truy xuất thiết lập giá trị biến lưu trữ nhớ • Ví dụ: NMLT - CON TRỎ CƠ BẢN 1.1 Biến vùng nhớ Địa ô nhớ int main() { char ch=‘x’; int a = 7; } NMLT - CON TRỎ CƠ BẢN ch x a 7 … Memory Layout (bytes) Toán tử & * • Toán tử & (Address-of Operator) đặt trước tên biến cho biết địa vùng nhớ biến • Toán tử * (Dereferencing Operator hay Indirection Operator) đặt trước địa cho biết giá trị lưu trữ địa • Ví dụ: NMLT - CON TRỎ CƠ BẢN 10 2.3 Các phép toán số học trỏ 0x10 0x14 0x18 0x22 0x26 0x30 arr int *p1 = &arr[1] p2 – p1 = p1 – p2 = -4 int *p2 = &arr[5] Memory Layout NMLT - CON TRỎ CƠ BẢN 44 2.4 Con trỏ mảng chiều int arr[6] = {5, 6, 9, 4, 1, 2}; int *parr; Xét đoạn code sau: 0x10 // Cách 0x14 0x18 parr = arr; // Cách parr = &arr[0]; arr 0x90 0x10 parr 0x22 0x26 0x30 Memory Layout NMLT - CON TRỎ CƠ BẢN 45 2.4 Con trỏ mảng chiều • Truy xuất tới giá trị phần tử thứ i mảng (xét i số hợp lệ mảng): arr[i] == *(arr+i) == parr[i] == *(parr + i) • Truy xuất tới địa phần tử thứ i mảng (xét i số hợp lệ mảng): &arr[i] == arr+i == &parr[i] == parr + i NMLT - CON TRỎ CƠ BẢN 46 2.4 Con trỏ mảng chiều 0x10 arr[0] = parr[0] = *(parr+0) 0x14 arr[1] = parr[1] = *(parr+1) 0x18 arr[2] = parr[2] = *(parr+2) 0x22 arr[3] = parr[3] = *(parr+3) 0x26 arr[4] = parr[4] = *(parr+4) 0x30 arr[5] = parr[5] = *(parr+5) Memory Layout NMLT - CON TRỎ CƠ BẢN 47 2.5 Truyền mảng chiều cho hàm • Xét đoạn chương trình sau Tìm lỗi sai giải thích ĐÚNG SAI int main() { int a[] = {1,2,3,4,5,6}; for (int i = 0; i *(p + i); } for (int i = 0; i < n; i++) {// câu b cout