1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang

28 51 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 28
Dung lượng 545,39 KB

Nội dung

Bài giảng Kỹ thuật lập trình - Chương 7: Con trỏ cung cấp cho người học các kiến thức: Tổ chức bộ nhớ, ứng dụng của con trở, mô hình của con trỏ, cấu trúc toán tử, khai báo trỏ, các phép toán, con trỏ và mảng,.... Mời các bạn cùng tham khảo nội dung chi tiết.

Ch ng 07 CON TR Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình N i dung          T ch c b nh  ng d ng c a tr  Mơ hình c a tr Tốn t & Khai báo tr Toán t * Các phép toán Con tr m ng C p phát b nh đ ng Tr n Quang © 2016 CuuDuongThanCong.com Ch Con tr c u trúc, toán t -> Các ch đ nâng cao v i tr  Th t đánh giá * ++, - Con tr const  Con tr đ n tr  Con tr void ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình T ch c b nh th c thi  T ch c b nh ch ng trình n p vào đ th c thi Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 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 ch đ c  Có th dùng chung Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 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 © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 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 tr ch ng (Ngu n: http://proprogramming.org/) http://chortle.ccsu.edu/) Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình T ch c b nh th c thi Vùng STACK  Ch a bi n khai báo ch ng trình  Thơng tin l n g i hàm Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình ng d ng c a tr  M ng C    Ph i bi t tr c s l ng ph n t t i th i m vi t ch ng trình Do đó, c n ph i khai báo m t s l ng l n ô nh đ s n Tuy nhiên, t i m t th i m đó, ch ng trình có th s s d ng h n r t nhi u  lãng phí Yêu c u: có th dùng m ng v i s l ng ph n t ch c n bi t lúc ch ng trình ch y? => Dùng tr Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình ng d ng c a tr  M ng C    Khi thêm vào xóa ph n t m ng, c n ph i d ch ph i 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 giúp phép qu n lý ph n t nói nhanh chóng Gi i pháp:  Tr n Quang © 2016 S d ng danh sách liên k t  dùng tr CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình Mơ hình c a tr Bi n a có đ a ch 0x1234 FFFF 0x1234 FFFF Bi n p tr ch a đ a ch c a bi n a Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 10 Toứn t *   Tố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 © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 14 Cức phép toứn tr     T ng, gi m: ++, -C ng, tr : +, C ng, tr k t h p gán: +=, -= So sánh: ==, != Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 15 Cức phép toứn tr    G i p tr có ki u T; Các phép c ng, tr : làm 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 © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 16 Con tr m ng Con tr m ng có nhi u m gi ng C đ u gi đ a ch c a ô nh  Con tr : gi đ a ch c a m t ô nh  M ng: gi đ a ch c a ph n t đ u tiên Do đó:  Có th gán m ng vào tr  Nh ng không th gán tr vào m ng  Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 17 Con tr m ng  Ví d : Gán m ng vào tr  a p gi đ a ch đ a int a[5]; 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 © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 18 Con tr m ng  Con tr m ng có cách truy c p nh   Dùng toán t [ ] Dùng toán t * + int a[5]; int *p = a; int id = 2; a[id] = 100; p[id] = 100; Gi ng *(a + id) = 100; *(p + id) = 100; Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 19 Con tr m ng Con tr m ng c ng có m khác nhau:  M ng: ph n t c a m ng n m STACK  Con tr : Các ph n t m ng tr ch đ n có th STACK hay HEAP Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 20 C p b nh đ ng    Giúp ng i l p trình t o m ng đ ng, không c n xác đ nh s l ng ph n t c a m ng đ ng t i th i m biên d ch nh m ng t nh M ng đ ng s đ c c p phát HEAP Vùng nh xin c p phát không t đ ng gi i phóng, nên C N l nh gi i phóng vùng nh sau dùng xong Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 21 C p b nh đ ng  Hàm xin c p phát b nh     malloc calloc realloc Hàm gi i phóng b nh  Tr n Quang © 2016 free CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 22 C p phát b nh đ ng p1 = (int*) malloc (num * sizeof(int)); num: s l ng ph n t xin c p phát sizeof(int): kích th c c a m i ph n t  num*sizeof(int): s bytes c n thi t đ xin Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 23 C p phát b nh đ ng int *p1; float *p2; int n = 100; xin c p phát b nh p1 = (int*) malloc (n * sizeof(int)); p2 = (float*) malloc (n * sizeof(float)); free(p1); free(p2); Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 24 C p phát b nh đ ng malloc int *p1 = (int*)malloc(num*sizeof(int)); if(p1 == NULL){ } else { } Hàm malloc tr v NULL n u khơng xin đ c Lúc đó, khơng th dùng b nh đ c! Do đó, LN LN ki m tra xem malloc có tr v NULL hay khơng Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 25 C p phát b nh đ ng   Hàm malloc tr v NULL n u không c p phát đ c vùng nh Do đó, nên ki m tra b ng l nh if tr c x lý ti p Ví d : int n = 100; int *p1 = (int*) malloc (n * sizeof(int)); if (p1 == NULL) { printf ("Khong cap phat duoc!\n"); exit(1); } else { // Ti p t c x lý free(p1); } Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 26 Con tr c u trúc typedef struct{ float x, y, z; } Point3D; (1) nh ngh a ki u c u trúc: Point3D Point3D *p_ptr = (Point3D*)malloc(sizeof(Point3D)); // (4) S d ng free(p_ptr); (2) Khai báo tr đ n m t m ng (5) Gi i phóng vùng nh Tr n Quang © 2016 CuuDuongThanCong.com (3) Xin c p phát b nh HEAP, p_ptr: gi đ a ch c a ô nh đ u tiên vùng đ c c p Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 27 Con tr c u trúc Truy c p bi n thành viên c u trúc qua tr (*p_ptr).x = 4.5f; (*p_ptr).y = 5.5f; (*p_ptr).z = 6.5f; p_ptr->x = 7.5f; p_ptr->y = 8.5f; p_ptr->z = 9.5f; p_ptr : bi n tr ch a đ a ch c a m t c u trúc Point D (*p_ptr) : Vùng nh c a c u trúc Point D (*p_ptr).x : Vùng nh ch a bi n x c a c u trúc Point D p_ptr -> x : Vùng nh ch a bi n x c a c u trúc Point D truy c p thơng qua tốn t -> t tr p_ptr Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 28 ... c u trúc qua tr (*p_ptr).x = 4.5f; (*p_ptr).y = 5.5f; (*p_ptr).z = 6.5f; p_ptr->x = 7. 5f; p_ptr->y = 8.5f; p_ptr->z = 9.5f; p_ptr : bi n tr ch a đ a ch c a m t c u trúc Point D (*p_ptr) : Vùng... n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Con tr https://fb.com/tailieudientucntt K thu t ỏ p trình 14 Cức phép toứn tr     T ng, gi m: ++, -C ng, tr : +, C ng, tr k t h p gán: +=, -= ... toán Con tr m ng C p phát b nh đ ng Tr n Quang © 2016 CuuDuongThanCong.com Ch Con tr c u trúc, toán t -> Các ch đ nâng cao v i tr  Th t đánh giá * ++, - Con tr const  Con tr đ n tr  Con tr

Ngày đăng: 11/01/2020, 19:22