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: Chương 1 - Trần Quang
39 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 9 - Trần Quang
33 p | 5 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 8 - Trần Quang
34 p | 9 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 6 - Trần Quang
37 p | 12 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 4 - Trần Quang
32 p | 8 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 3 - Trần Quang
52 p | 11 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 2 - Trần Quang
25 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Hàm nâng cao (Phần 1) - ThS. Đặng Bình Phương
26 p | 0 | 0
-
Bài giảng Kỹ thuật lập trình: Các kỹ thuật thao tác trên bit - ThS. Đặng Bình Phương
29 p | 1 | 0
-
Bài giảng Kỹ thuật lập trình: Tập tin - ThS. Đặng Bình Phương
48 p | 3 | 0
-
Bài giảng Kỹ thuật lập trình: Kỹ thuật lập trình đệ quy - ThS. Đặng Bình Phương
44 p | 1 | 0
-
Bài giảng Kỹ thuật lập trình: Dữ liệu kiểu cấu trúc - ThS. Đặng Bình Phương
33 p | 2 | 0
-
Bài giảng Kỹ thuật lập trình: Chuỗi ký tự - ThS. Đặng Bình Phương
20 p | 2 | 0
-
Bài giảng Kỹ thuật lập trình: Danh sách liên kết - ThS. Đặng Bình Phương
20 p | 2 | 0
-
Bài giảng Kỹ thuật lập trình: Chuyển đổi kiểu dữ liệu và cấp phát bộ nhớ động - ThS. Đặng Bình Phương
28 p | 3 | 0
-
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
48 p | 0 | 0
-
Bài giảng Kỹ thuật lập trình: Giới thiệu môn học - ThS. Đặng Bình Phương
7 p | 1 | 0
-
Bài giảng Kỹ thuật lập trình: Hàm nâng cao (Phần 2) - ThS. Đặng Bình Phương
30 p | 0 | 0
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