Bài giảng Nhập môn lập trình - Chương 13: Con trỏ nâng cao
Số trang: 43
Loại file: ppt
Dung lượng: 3.22 MB
Lượt xem: 12
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 13 của bài giảng Nhập môn lập trình giới thiệu về con trỏ nâng cao. Thông qua chương này người học sẽ được tìm hiểu về con trỏ cấp 2, con trỏ và mảng nhiều chiều, mảng con trỏ, con trỏ hàm. Mời các bạn cùng tham khảo để nắm bắt những nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Nhập môn lập trình - Chương 13: Con trỏ nâng cao &&VCVC BB BB Nộidung 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 NMLTContrỏnângcao 1 &&VCVC BB BB Contrỏcấp2(contrỏđếncontrỏ) Đặ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? 2 NMLTContrỏnângcao &&VCVC BB BB Contrỏcấp2 int*p intn 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 intn intn NULL 2 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … NN UU LL LL … int*a=NULL NMLTContrỏnângcao 3 &&VCVC BB BB Contrỏcấp2 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; } NMLTContrỏnângcao 4 &&VCVC BB BB Contrỏcấp2 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); } 5 NMLTContrỏnângcao &&VCVC BB BB Contrỏcấp2 int**p intn 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 intn intn 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 NMLTContrỏnângcao 6 &&VCVC BB BB Contrỏcấp2 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 NMLTContrỏnângcao 7 &&VCVC BB BB Contrỏvàmảng2chiề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] NMLTContrỏnângcao 8 &&VCVC BB BB Contrỏvàmảng2chiều Hướng tiếp cận 1 Các phần tử tạo thành mảng 1 chiều ...
Nội dung trích xuất từ tài liệu:
Bài giảng Nhập môn lập trình - Chương 13: Con trỏ nâng cao &&VCVC BB BB Nộidung 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 NMLTContrỏnângcao 1 &&VCVC BB BB Contrỏcấp2(contrỏđếncontrỏ) Đặ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? 2 NMLTContrỏnângcao &&VCVC BB BB Contrỏcấp2 int*p intn 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 intn intn NULL 2 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … NN UU LL LL … int*a=NULL NMLTContrỏnângcao 3 &&VCVC BB BB Contrỏcấp2 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; } NMLTContrỏnângcao 4 &&VCVC BB BB Contrỏcấp2 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); } 5 NMLTContrỏnângcao &&VCVC BB BB Contrỏcấp2 int**p intn 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 intn intn 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 NMLTContrỏnângcao 6 &&VCVC BB BB Contrỏcấp2 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 NMLTContrỏnângcao 7 &&VCVC BB BB Contrỏvàmảng2chiề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] NMLTContrỏnângcao 8 &&VCVC BB BB Contrỏvàmảng2chiều Hướng tiếp cận 1 Các phần tử tạo thành mảng 1 chiều ...
Tìm kiếm theo từ khóa liên quan:
Nhập môn lập trình Bài giảng Nhập môn lập trình Ngôn ngữ lập trình Con trỏ nâng cao Con trỏ cấp 2 Mảng nhiều chiềuGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 311 0 0 -
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 269 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 259 0 0 -
Bài thuyết trình Ngôn ngữ lập trình: Hệ điều hành Window Mobile
30 trang 257 0 0 -
Giáo trình Lập trình cơ bản với C++: Phần 1
77 trang 230 0 0 -
Bài giảng Một số hướng nghiên cứu và ứng dụng - Lê Thanh Hương
13 trang 220 0 0 -
Giáo án Tin học lớp 11 (Trọn bộ cả năm)
125 trang 211 1 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 201 0 0 -
Bài tập lập trình Windows dùng C# - Bài thực hành
13 trang 176 0 0 -
Giáo trình Lập trình C căn bản: Phần 1
64 trang 169 0 0