Bài giảng Kỹ thuật lập trình: Dữ liệu kiểu con trỏ (Nâng cao) - ThS. Đặng Bình Phương
Số trang: 48
Loại file: ppt
Dung lượng: 3.01 MB
Lượt xem: 11
Lượt tải: 0
Xem trước 5 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Chương này trình bày về dữ liệu kiểu con trỏ. Các nội dung chính trong chương này gồm có: Con trỏ cấp 2 (con trỏ đến con trỏ), con trỏ và mảng 2 chiều, mảng con trỏ, con trỏ hàm,...và một số bài tập liên quan. Mời các bạn cùng tham khảo.
Nội dung trích xuất từ tài liệu:
Bài giảng Kỹ thuật lập trình: Dữ liệu kiểu con trỏ (Nâng cao) - ThS. Đặng Bình Phương Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Trường Đại học Khoa học Tự nhiên KỸ THUẬT LẬP TRÌNH ThS. Đặng Bình Phương dbphuong@fit.hcmus.edu.vn DỮ LIỆU KIỂU CON TRỎ (NÂNG CAO) 1 && VC VC BB BB Nội dung 1 Con trỏ cấp 2 2 Con trỏ và mảng nhiều chiều 3 Mảng con trỏ 4 Con trỏ hàm Dữ liệu kiểu con trỏ (nâng cao) 2 && VC VC BB BB Con trỏ cấp 2 (con trỏ đến con trỏ) Đặt vấn đề void CapPhat(int *p, int n) { p = (int *)malloc(n * sizeof(int)); } void main() { int *a = NULL; CapPhat(a, 2); // a vẫn = NULL } Làm sao thay đổi giá trị của con trỏ (không phải giá trị mà nó trỏ đến) sau khi gọi hàm? Dữ liệu kiểu con trỏ (nâng cao) 3 && VC VC BB BB Con trỏ cấp 2 int *p int n 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 … 22 NN 00 22 UU 00 00 LL 00 00 LL 02 00 02 00 00 00 00 00 00 … CapPhat int *p int *p int n int n NULL 2 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … NN UU LL LL … int *a = NULL Dữ liệu kiểu con trỏ (nâng cao) 4 && VC VC BB BB Con trỏ cấp 2 Giải pháp Sử dụng tham chiếu int *&p (trong C++) void CapPhat(int *&p, int n) { p = (int *)malloc(n * sizeof(int)); } Không thay đổi trực tiếp tham số mà trả về int* CapPhat(int n) { int *p = (int *)malloc(n * sizeof(int)); return p; } Dữ liệu kiểu con trỏ (nâng cao) 5 && VC VC BB BB Con trỏ cấp 2 Giải pháp Sử dụng con trỏ p trỏ đến con trỏ a này. Hàm sẽ thay đổi giá trị của con trỏ â gián tiếp thông qua con trỏ p. void CapPhat(int **p, int n) { *p = (int *)malloc(n * sizeof(int)); } void main() { int *a = NULL; CapPhat(&a, 4); } 6 Dữ liệu kiểu con trỏ (nâng cao) && VC VC BB BB Con trỏ cấp 2 int **p int n 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 … 0B 0B 00 00 00 00 00 00 02 02 00 00 00 00 00 00 … CapPhat int **p int **p int n int n 0B 2 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … 22 NN 00 22 UU 00 00 LL 00 00 LL 00 … int *a = NULL Dữ liệu kiểu con trỏ (nâng cao) 7 && VC VC BB BB Con trỏ cấp 2 Lưu ý int x = 12; int *ptr = &x; // OK int k = &x; ptr = k; // Lỗi int **ptr_to_ptr = &ptr; // OK int **ptr_to_ptr = &x; // Lỗi **ptr_to_ptr = 12; // OK *ptr_to_ptr = 12; // Lỗi printf(“%d”, ptr_to_ptr); // Địa chỉ ptr printf(“%d”, *ptr_to_ptr); // Giá trị ptr printf(“%d”, **ptr_to_ptr); // Giá trị x Dữ liệu kiểu con trỏ (nâng cao) 8 && VC VC BB BB Con trỏ và mảng 2 chiều int a[3][4]; 0 1 2 3 4 5 6 7 8 9 10 11 a 0 1 2 int 0 1 2 3 1 2 a 0 1 2 int[4] Dữ liệu kiểu con trỏ (nâng cao) 9 && VC VC BB BB Con trỏ và mảng 2 chiều Hướng tiếp cận 1 Các phần tử tạo thành mảng 1 chiều Sử dụng con trỏ int * để duyệt mảng 1 chiều int *p = (int *)a +1 0 1 2 3 4 5 6 7 8 9 10 11 int a[3][4] Dữ liệu kiểu con trỏ (nâng cao) 10 && VC VC BB BB Hướng tiếp cận 1 Nhập / Xuất theo chỉ số mảng 1 chiều #define D 3 #define C 4 void main() { int a[D ...
Nội dung trích xuất từ tài liệu:
Bài giảng Kỹ thuật lập trình: Dữ liệu kiểu con trỏ (Nâng cao) - ThS. Đặng Bình Phương Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Trường Đại học Khoa học Tự nhiên KỸ THUẬT LẬP TRÌNH ThS. Đặng Bình Phương dbphuong@fit.hcmus.edu.vn DỮ LIỆU KIỂU CON TRỎ (NÂNG CAO) 1 && VC VC BB BB Nội dung 1 Con trỏ cấp 2 2 Con trỏ và mảng nhiều chiều 3 Mảng con trỏ 4 Con trỏ hàm Dữ liệu kiểu con trỏ (nâng cao) 2 && VC VC BB BB Con trỏ cấp 2 (con trỏ đến con trỏ) Đặt vấn đề void CapPhat(int *p, int n) { p = (int *)malloc(n * sizeof(int)); } void main() { int *a = NULL; CapPhat(a, 2); // a vẫn = NULL } Làm sao thay đổi giá trị của con trỏ (không phải giá trị mà nó trỏ đến) sau khi gọi hàm? Dữ liệu kiểu con trỏ (nâng cao) 3 && VC VC BB BB Con trỏ cấp 2 int *p int n 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 … 22 NN 00 22 UU 00 00 LL 00 00 LL 02 00 02 00 00 00 00 00 00 … CapPhat int *p int *p int n int n NULL 2 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … NN UU LL LL … int *a = NULL Dữ liệu kiểu con trỏ (nâng cao) 4 && VC VC BB BB Con trỏ cấp 2 Giải pháp Sử dụng tham chiếu int *&p (trong C++) void CapPhat(int *&p, int n) { p = (int *)malloc(n * sizeof(int)); } Không thay đổi trực tiếp tham số mà trả về int* CapPhat(int n) { int *p = (int *)malloc(n * sizeof(int)); return p; } Dữ liệu kiểu con trỏ (nâng cao) 5 && VC VC BB BB Con trỏ cấp 2 Giải pháp Sử dụng con trỏ p trỏ đến con trỏ a này. Hàm sẽ thay đổi giá trị của con trỏ â gián tiếp thông qua con trỏ p. void CapPhat(int **p, int n) { *p = (int *)malloc(n * sizeof(int)); } void main() { int *a = NULL; CapPhat(&a, 4); } 6 Dữ liệu kiểu con trỏ (nâng cao) && VC VC BB BB Con trỏ cấp 2 int **p int n 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 … 0B 0B 00 00 00 00 00 00 02 02 00 00 00 00 00 00 … CapPhat int **p int **p int n int n 0B 2 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … 22 NN 00 22 UU 00 00 LL 00 00 LL 00 … int *a = NULL Dữ liệu kiểu con trỏ (nâng cao) 7 && VC VC BB BB Con trỏ cấp 2 Lưu ý int x = 12; int *ptr = &x; // OK int k = &x; ptr = k; // Lỗi int **ptr_to_ptr = &ptr; // OK int **ptr_to_ptr = &x; // Lỗi **ptr_to_ptr = 12; // OK *ptr_to_ptr = 12; // Lỗi printf(“%d”, ptr_to_ptr); // Địa chỉ ptr printf(“%d”, *ptr_to_ptr); // Giá trị ptr printf(“%d”, **ptr_to_ptr); // Giá trị x Dữ liệu kiểu con trỏ (nâng cao) 8 && VC VC BB BB Con trỏ và mảng 2 chiều int a[3][4]; 0 1 2 3 4 5 6 7 8 9 10 11 a 0 1 2 int 0 1 2 3 1 2 a 0 1 2 int[4] Dữ liệu kiểu con trỏ (nâng cao) 9 && VC VC BB BB Con trỏ và mảng 2 chiều Hướng tiếp cận 1 Các phần tử tạo thành mảng 1 chiều Sử dụng con trỏ int * để duyệt mảng 1 chiều int *p = (int *)a +1 0 1 2 3 4 5 6 7 8 9 10 11 int a[3][4] Dữ liệu kiểu con trỏ (nâng cao) 10 && VC VC BB BB Hướng tiếp cận 1 Nhập / Xuất theo chỉ số mảng 1 chiều #define D 3 #define C 4 void main() { int a[D ...
Tìm kiếm theo từ khóa liên quan:
Kỹ thuật lập trình Bài giảng Kỹ thuật lập trình Quản lý bộ nhớ động Thuật toán sắp xếp Dữ liệu kiểu con trỏ Con trỏ cấp 2Gợi ý tài liệu liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 260 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 202 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 192 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 161 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 151 0 0 -
Báo cáo thực tập Công nghệ thông tin: Lập trình game trên Unity
27 trang 117 0 0 -
Giáo trình về phân tích thiết kế hệ thống thông tin
113 trang 114 0 0 -
LUẬN VĂN: Tìm hiểu kỹ thuật tạo bóng cứng trong đồ họa 3D
41 trang 107 0 0 -
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 trang 105 0 0 -
Giáo trình Nhập môn lập trình VB6: Phần 2
184 trang 86 0 0