Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
lượt xem 2
download
Bài giảng Kỹ thuật lập trình: Chương 7 - Con trỏ, được biên soạn gồm các nội dung chính sau: Tổ chức bộ nhớ; Ứng dụng của con trỏ; Mô hình của con trỏ; Toán tử; Khai báo trỏ; Toán tử; Các phép toán; Con trỏ và mảng; Cấp phát bộ nhớ động;...Mời các bạn cùng tham khảo!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
- Chương 07 CON TRỎ Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 1
- Nội dung Tổ chức bộ nhớ Con trỏ và cấu trúc, Ứng dụng của con trỏ toán tử -> Mô hình của con trỏ Các chủ đề nâng cao Toán tử & với con trỏ Thứ tự đánh giá * Khai báo trỏ và ++, -- Toán tử * Con trỏ và const Các phép toán Con trỏ đến con trỏ Con trỏ và mảng Con trỏ void Cấp phát bộ nhớ động Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 2
- Tổ chức bộ nhớ thực thi Tổ chức bộ nhớ khi chương trình nạp vào để thực thi Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 3
- Tổ chức bộ nhớ thực thi Vùng TEXT Chứa mã thực thi của chương trình Vùng này chỉ đọc Có thể dùng chung Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 4
- Tổ chức bộ nhớ thực thi Vùng DATA Dữ liệu đã được khởi tạo (initialized) Dữ liệu không được khởi tạo (uninitialzed) gồm: Biến toàn cục Biến tĩnh (static) Hằng chuỗi (Nguồn: http://proprogramming.org/) Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 5
- Tổ chức bộ nhớ thực thi Vùng HEAP Chứa bộ nhớ xin cấp phát động bởi người lập trình Liên quan đến kiểu dữ liệu con trỏ trong chương này (Nguồn: http://chortle.ccsu.edu/) http://proprogramming.org/) Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 6
- Tổ chức bộ nhớ thực thi Vùng STACK Chứa các biến khai báo trong chương trình Thông tin các lần gọi hàm Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 7
- Ứng dụng của con trỏ Mảng trong C Phải biết trước số lượng phần tử tại thời điểm viết chương trình Do đó, cần phải khai báo một số lượng lớn các ô nhớ để sẵn. Tuy nhiên, tại một thời điểm nào đó, chương trình có thể sẽ sử dụng ít hơn rất nhiều lãng phí Yêu cầu: có thể nào dùng mảng với số lượng phần tử chỉ cần biết lúc chương trình đang chạy? => Dùng con trỏ Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 8
- Ứng dụng của con trỏ Mảng trong C Khi thêm vào và xóa các phần tử trên mảng, cần phải dịch phải và trái nhiều phần tử tốn nhiều thời gian Yêu cầu: Có cách tổ chức dữ liệu nào giúp các phép quản lý phần tử nói trên nhanh chóng Giải pháp: Sử dụng danh sách liên kết dùng con trỏ Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 9
- Mô hình của con trỏ Biến a có địa chỉ là 0x1234 FFFF 0x1234 FFFF Biến p là con trỏ chứa địa chỉ của biến a Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 10
- Toán tử & Dùng để lấy địa chỉ của một biến Ví dụ: int a = 100; printf("%d\n", a); printf("%p\n", &a); Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 11
- Toán tử & typedef struct sPoint3D{float x, y, z;} Point3D; void main(){ Point3D p1 = {1.0f, 2.0f, 3.0f}; printf("%-5.1f\n", p1.x); printf("%p\n", &p1); In ra địa chỉ của p1 printf("%p\n", &p1.x); In ra giá trị của p1.x printf("%p\n", &p1.y); In ra địa chỉ của p1.y printf("%p\n", &p1.z); In ra địa chỉ của p1.z } Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 12
- Khai báo con trỏ *; * = 0; //NULL * = &; Ví dụ: int a; // biến số nguyên int *p1; // con trỏ đến số nguyên, giá trị chưa xác định int *p2 = 0; // con trỏ đến số nguyên, giá trị là NULL int *p3 = &a; // con trỏ đến số nguyên, giá trị là địa chỉ của biến a Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 13
- Toán tử * Toán tử * lấy giá trị (tham khảo) tại một địa chỉ Ví dụ: int a = 100; int *p; p = &a; printf("a : %d\n", a); printf("&a : %p\n", &a); printf("p : %p\n", p); printf("*p : %d\n", *p); printf("*&a: %d\n", *&a); Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 14
- Các phép toán trên con trỏ Tăng, giảm: ++, -- Cộng, trừ: +, - Cộng, trừ kết hợp gán: +=, -= So sánh: ==, != Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 15
- Các phép toán trên con trỏ Gọi p là con trỏ có kiểu T; Các phép cộng, trừ: làm con trỏ p tăng hay giảm một bội số của kích thước kiểu T Ví dụ: int a = 100; int *p = &a; printf("p : %p\n", p); p++; printf("p : %p\n", p); Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 16
- Con trỏ và mảng Con trỏ và mảng có nhiều điểm giống nhau. Cả 2 đều giữ địa chỉ của ô nhớ Con trỏ: giữ địa chỉ của một ô nhớ nào đó Mảng: giữ địa chỉ của phần tử đầu tiên Do đó: Có thể gán mảng vào con trỏ Nhưng không thể gán con trỏ vào mảng Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 17
- Con trỏ và mảng Ví dụ: Gán mảng vào con trỏ int a[5]; a và p giữ cùng địa chỉ là địa chỉ phần tử đầu tiên của mảng int *p = a; printf ("a =%p\n", a); printf ("p =%p\n", p); Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 18
- Con trỏ và mảng Con trỏ và mảng có cùng cách truy cập các ô nhớ Dùng toán tử [ ] Dùng toán tử * và + int a[5]; int *p = a; int id = 2; a[id] = 100; p[id] = 100; Giống nhau *(a + id) = 100; *(p + id) = 100; Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 19
- Con trỏ và mảng Con trỏ và mảng cũng có điểm khác nhau: Mảng: các phần tử của mảng nằm trên STACK Con trỏ: Các phần tử mảng con trỏ chỉ đến có thể trên STACK hay HEAP Trần Quang Kỹ thuật lập trình Chương 06: Con trỏ © 2016 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Kỹ thuật lập trình - Phạm Thế Bảo
0 p | 220 | 32
-
Bài giảng Kỹ thuật lập trình: Chương I - Lưu Hồng Việt
48 p | 194 | 23
-
Bài giảng Kỹ thuật lập trình: Chương II - Lưu Hồng Việt
74 p | 182 | 18
-
Bài giảng Kỹ thuật lập trình: Chương IV - Lưu Hồng Việt
32 p | 151 | 17
-
Bài giảng Kỹ thuật lập trình Programing technique - Vũ Đức Vượng
68 p | 221 | 16
-
Bài giảng Kỹ thuật lập trình: Chương V - Lưu Hồng Việt
19 p | 127 | 15
-
Bài giảng Kỹ thuật lập trình: Chương III - Lưu Hồng Việt
51 p | 147 | 15
-
Bài giảng Kỹ thuật lập trình: Chương VI - Lưu Hồng Việt
27 p | 133 | 11
-
Bài giảng Kỹ thuật lập trình: Phần 1 - ĐH CNTT&TT
37 p | 114 | 10
-
Bài giảng Kỹ thuật lập trình - Bài 1: Tổng quan về kỹ thuật lập trình
65 p | 165 | 8
-
Bài giảng Kỹ thuật lập trình: Bài 1 - Phạm Đình Sắc
9 p | 129 | 7
-
Bài giảng Kỹ thuật lập trình nâng cao: Chương 4 - ThS. Dương Thành Phết
26 p | 92 | 7
-
Bài giảng Kỹ thuật lập trình: Chương 1 - Trần Minh Thái, Phạm Đức Thành
50 p | 117 | 6
-
Bài giảng Kỹ thuật lập trình - TS. Vũ Hương Giang
8 p | 117 | 5
-
Bài giảng Kỹ thuật lập trình: Bài 2 - Phạm Đình Sắc
7 p | 117 | 5
-
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 p | 15 | 4
-
Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình
45 p | 55 | 3
-
Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình (Trường Đại học Bách khoa Hà Nội)
46 p | 12 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn