Bài giảng Kỹ thuật lập trình: Chương 3 (phần 2) - Võ Quang Hoàng Khang
lượt xem 3
download
Bài giảng Kỹ thuật lập trình - Chương 3 (phần 2): Kiểu con trỏ. Chương này tập trung vào những nội dung chính sau: Cấp phát bộ nhớ động, con trỏ và mảng một chiều, con trỏ và cấu trúc. 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 3 (phần 2) - Võ Quang Hoàng Khang
- Trường Đại Học Công Nghiệp TP. HCM Khoa Công Nghệ Thông Tin CHƯƠNG 3: KIỂU CON TRỎ(p2) Võ Quang Hoàng Khang Email: vqhkhang@gmail.com 1
- & VC BB Nội dung 1 Cấp phát bộ nhớ động 2 Con trỏ và mảng một chiều 3 Con trỏ và cấu trúc 4 Bài tập – Kiểm tra 2
- & VC BB Cấp phát bộ nhớ tĩnh và động Cấp phát tĩnh (static memory allocation) Khai báo biến, cấu trúc, mảng, … Bắt buộc phải biết trước cần bao nhiều bộ nhớ lưu trữ tốn bộ nhớ, không thay đổi được kích thước, … Cấp phát động (dynamic memory allocation) Cần bao nhiêu cấp phát bấy nhiêu. Có thể giải phóng nếu không cần sử dụng. 3
- & VC BB Cấp phát bộ nhớ động Thuộc thư viện hoặc malloc calloc free Trong C++ new delete 4
- & VC BB Cấp phát bộ nhớ động void *malloc(size_t size) Cấp phát một vùng nhớ size (bytes) Con trỏ đến vùng nhớ được cấp phát NULL nếu không đủ bộ nhớ int *p = (int *)malloc(10*sizeof(int)); if (p == NULL) printf(“Không đủ bộ nhớ! ”); 5
- & VC BB Cấp phát bộ nhớ động void *calloc(size_t num, size_t size) Cấp phát vùng nhớ gồm num phần tử, mỗi phần tử kích thước size (bytes) Con trỏ đến vùng nhớ được cấp phát NULL nếu không đủ bộ nhớ int *p = (int *)calloc(10, sizeof(int)); if (p == NULL) printf(“Không đủ bộ nhớ! ”); 6
- & VC BB Cấp phát bộ nhớ động void *free(void *ptr) Giải phóng vùng nhớ do ptr trỏ đến, được cấp bởi các hàm malloc(), calloc(). Nếu ptr là NULL thì không làm gì cả. Không có int *p = (int *)malloc(10*sizeof(int)); free(p); 7
- & VC BB Cấp phát bộ nhớ động = new [size] Cấp phát vùng nhớ có kích thước sizeof()*size Con trỏ đến vùng nhớ được cấp phát NULL nếu không đủ bộ nhớ int *a1 = (int *)malloc(sizeof(int)); int *a2 = new int; int *p1 = (int *)malloc(10*sizeof(int)); int *p2 = new int[10]; 8
- & VC BB Cấp phát bộ nhớ động delete [] Giải phóng vùng nhớ do trỏ đến (được cấp phát bằng new) Không có! int *a = new int; delete a; int *p = new int[10]; delete []p; 9
- & VC BB Cấp phát bộ nhớ động Lưu ý Cấp phát bằng malloc, calloc thì giải phóng bằng free, cấp phát bằng new thì giải phóng bằng delete. Cấp phát bằng new thì giải phóng bằng delete, cấp phát mảng bằng new [] thì giải phóng bằng delete []. 10
- & VC BB Con trỏ và mảng một chiều Mảng một chiều int array[3]; Tên mảng array là một hằng con trỏ không thể thay đổi giá trị của hằng này. array là địa chỉ đầu tiên của mảng array == &array[0] 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … array 11
- & VC BB Con trỏ và mảng một chiều Con trỏ đến mảng một chiều int array[3], *parray; parray = array; // Cách 1 parray = &array[0]; // Cách 2 18 19 1A 1B 1C 1D 1E 1F … 0B 00 00 00 … parray 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … array 12
- & VC BB Phép toán số học trên con trỏ Phép cộng (tăng) + n + n * sizeof() Có thể sử dụng toán tử gộp += hoặc ++ p = array +2 +1 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … int array[3]; 13
- & VC BB Phép toán số học trên con trỏ Phép trừ (giảm) – n – n * sizeof() Có thể sử dụng toán tử gộp –= hoặc – – p = &array[2] –2 –1 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … int array[3]; 14
- & VC BB Phép toán số học trên con trỏ Các phép toán khác Phép so sánh: So sánh địa chỉ giữa hai con trỏ (thứ tự ô nhớ) • == != •> >= •<
- & VC BB Con trỏ và mảng một chiều Truy xuất đến phần tử thứ n của mảng (không sử dụng biến mảng) array[n] == p[n] == *(p + n) * ( p + 2 ) 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 … … int array[3]; 16
- & VC BB Con trỏ và mảng một chiều Ví dụ nhập mảng void main() { int a[10], n = 10, *pa; pa = a; // hoặc pa = &a[0]; for (int i = 0; i
- & VC BB Con trỏ và mảng một chiều Ví dụ xuất mảng void main() { int a[10], n = 10, *pa; pa = a; // hoặc pa = &a[0]; … for (int i = 0; i
- & VC BB Con trỏ và mảng một chiều Lưu ý Không thực hiện các phép toán nhân, chia, lấy phần dư. Tăng/giảm con trỏ n đơn vị có nghĩa là tăng/giảm giá trị của nó n*sizeof() Không thể tăng/giảm biến mảng. Hãy gán một con trỏ đến địa chỉ đầu của mảng và tăng/giảm nó. 19
- & VC BB Con trỏ cấu trúc Truy xuất bằng 2 cách -> (*). Ví dụ struct PHANSO { int tu, mau; }; PHANSO ps1, *ps2 = &ps1; // ps2 là con trỏ ps1.tu = 1; ps1.mau = 2; ps2->tu = 1; ps2->mau = 2; (*ps2).tu = 1; (*ps2).mau = 2; 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 | 11 | 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 | 2 | 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 | 2 | 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 | 3 | 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 | 3 | 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 | 1 | 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