Bài giảng Giới thiệu lập trình - Chương 9: Con trỏ - Lê Nguyên Khôi

pdf 23 trang hoanguyen 3750
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Giới thiệu lập trình - Chương 9: Con trỏ - Lê Nguyên Khôi", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_gioi_thieu_lap_trinh_chuong_9_con_tro_le_nguyen_kh.pdf

Nội dung text: Bài giảng Giới thiệu lập trình - Chương 9: Con trỏ - Lê Nguyên Khôi

  1. Gi ới Thi ệu Lập Trình Con Tr ỏ TS. Lê Nguyên Khôi Tr ườ ng Đại học Công ngh ệ, ĐHQGHN
  2. Nội Dung  Con tr  Bi n ki u con tr  Qu n lý vùng nh  Toán t con tr  Mng ng  Khai báo & s d ng  Các phép toán v i con tr Gi i Thi u L p Trình 1
  3. Gi ới Thi ệu  nh ngh a:  a ch vùng nh máy tính c a m t bi n  Vùng nh máy tính  Chia nh thành các byte  ánh s th t l n l ư t (h 16)  a ch ư c s d ng làm tên cho bi n  Con tr ã s d ng  Truy n tham s theo ki u tham chi u  a ch c a tham s ư c truy n Gi i Thi u L p Trình 2
  4. Bi ến Con Tr ỏ  Con tr là “ki u d li u”  Ki u a ch vùng nh  Có th dùng bi n l ưu giá tr ki u con tr  Không ph i ki u int , double  a ch c a vùng nh dùng l ưu d li u ki u int , double  Ví d : double * p; Khai báo p là bi n ki u con tr double Lưu a ch vùng nh ki u double Gi i Thi u L p Trình 3
  5. Bi ến Con Tr ỏ – Khai Báo  Khai báo con tr gi ng bi n ki u d li u khác  Thêm * vào tr ư c tên bi n  Ký hi u * ph i t tr ư c m i bi n con tr  Ví d : int *p1, *p2, v1, v2;  p1 , p2 bi n ki u con tr int  v1 , v2 bi n ki u int  S d ng p1 , p2 lưu a ch các bi n ki u int  S d ng p1 , p2 lưu a ch ca v1 , v2 Gi i Thi u L p Trình 4
  6. Địa Ch ỉ & S ố Nguyên  Con tr là a ch  a ch là s nguyên  Con tr KHÔNG là s nguyên  C++ ép con tr ph i ư c s d ng nh ư a ch  Không th ư c s d ng nh ư s nguyên  Mc dù ó là s nguyên!!! Gi i Thi u L p Trình 5
  7. Toán T ử &  Toán t & tr v a ch c a bi n p v1 1 { 2 int *p, v1, v2; 0x44ab12 10 3 v1 = 10; v2 = 20; 0x44ab12 4 p = &v1; p v2 5 p = &v2; 0x22ff32 6 } 20 0x22ff32  Dòng 4: t bi n con tr p ch t i bi n v1  p bng a ch c a v1  Dòng 5: t bi n con tr p ch t i bi n v2  p ch ti v1 Gi i Thi u L p Trình 6
  8. Toán T ử *  Toán t * truy xu t giá tr c a vùng nh ư c qu n lý (l ưu) b i con tr p v1 1 { 2 int *p, v1, v2; 0x44ab12 10 3 v1 = 10; p = &v1; 0x44ab12 4 cout << *p; p v2 5 v2 = 20; p = &v2; 0x22ff32 6 cout << *p; 20 7 } 0x22ff32  Dòng 4: in ra 10 (giá tr bi n v1 , mà p ch t i)  Dòng 6: in ra 20 (giá tr bi n v2 , mà p ch t i) Gi i Thi u L p Trình 7
  9. Toán T ử =  Gán giá tr p v1 1 { 2 int v1 = 10, v2 = 20; 0x44ab12 10 20 3 int *p = &v1; 0x44ab12 4 int *p = &v2; q v2 5 *p = *q; 0x22ff32 6 } 20 0x22ff32  Dòng 3, 4: p ch t i v1 , q ch t i v2  Dòng 5: s d ng toán t * truy c p vùng t i nh con tr qu n lý  *p là v1 , *q là v2 , dòng 5 tươ ng ươ ng v1 = v2; Gi i Thi u L p Trình 8
  10. Toán T ử =  Gán con tr 0x22ff32 p v1 1 { 2 int v1 = 10, v2 = 20; 0x44ab12 10 3 int *p = &v1; 0x44ab12 4 int *p = &v2; q v2 5 p = q; 0x22ff32 6 } 20 0x22ff32  Dòng 3, 4: p ch t i v1 , q ch t i v2  Dòng 5: gán p bng q  p không qu n lý v1  p và q cùng qu n lý v2 Gi i Thi u L p Trình 9
  11. Bài T ập i 0x2232 1 { 2 int i = 10, j = 20, k; j 3 int *p = &i; 0x7756 4 int *q = &j; 5 *p += 1; k 6 p = &k; 0x9948 7 *p = *q; 8 p = q; p 9 *p = i; 0x16aa 0 } p 0x64cc Gi i Thi u L p Trình 10
  12. Toán T ử new  S d ng toán t new t o m t vùng nh m i cho con tr , vùng nh này không có tên int * p = new int;  Kh i t o m t vùng nh m i cho con tr p, giá tr t i vùng nh này không bi t int * p = new int(10);  Kh i t o mt vùng nh m i cho con tr p, giá tr t i vùng nh này ư c kh i t o là 10 Gi i Thi u L p Trình 11
  13. Bài T ập p1 ? p1 ? p2 ? p2 ? 1 { 2 int *p1, *p2; p1 p1 3 p1 = new int; 10 10 4 *p1 = 10; p2 ? p2 5 p2 = p1; ? 6 *p2 = 20; p1 p1 7 p1 = new int; 20 20 8 *p1 = 30; p2 p2 9 } 30 p1 p2 20 Gi i Thi u L p Trình 12
  14. Toán T ử delete  S d ng toán t delete gi i phóng vùng nh ng ư c t o ra b i toán t new { int * p = new int; delete p; }  Lưu ý: ch gi i phóng vùng nh ư c t o ra b i new , không ph i xóa bi n con tr p Gi i Thi u L p Trình 13
  15. Toán T ử delete  Vùng nh ng có th ư c tr v b i hàm int * f(int * q) { int * p = new int; return p; }  Vùng nh ng ch ư c gi i phóng khi s dng delete , do ó vùng nh ng t o ra trong hàm không b xóa sau khi k t thúc hàm  Ch các bi n khai báo trong hàm b xóa, trong ó có bi n con tr p Gi i Thi u L p Trình 14
  16. Mảng Đ ộng  Bi n m ng th c ch t là bi n con tr  Mng thông th ư ng ( int a[10] )  dài m ng c nh  Không th thay i dài sau khi khai báo  Có th coi là con tr h ng (con tr t nh)  Mng ng ( int * a = new int[10])  dài m ng có th thay i sau khi khai báo  S d ng l i toán t new int * a = new int[10]; a = new int[50]; Gi i Thi u L p Trình 15
  17. Mảng Đ ộng – Mảng Tĩnh int * a = new int[10]; int * p;  a và p u là bi n con tr , nh ưng a là h ng  Có th gán ( ư c phép) p = a; p ch t i a ch mà a ang ch t i  Nh ưng không ư c phép (l i d ch) a = p; a là h ng, không thay i giá tr c a a Gi i Thi u L p Trình 16
  18. Nh ắc Lại: cstring & L ớp string char aCString[]; string stringVar;  Chuy n cstring sang string (h p l ) stringVar = aCString;  Chuy n string sang cstring (không h p l) aCString = stringVar; Gi i Thi u L p Trình 17
  19. Mảng Đ ộng  Hn ch c a m ng thông th ư ng:  Ph i khai báo dài tr ư c  dài m ng có th không bi t t i khi ch y ch ươ ng trình  Ph i ư c l ư ng dài l n nh t  Lãng phí b nh  Mng ng  Có th t ng và gi m khi c n thi t Gi i Thi u L p Trình 18
  20. Gi ải Phóng M ảng Động  Cng ư c th c hi n khi ch y d = new double[10]; // thao tác v ới d delete [] d;  Gi i phóng t t c b nh cho m ng ng  [] thông báo gi i phóng b nh cho m ng  Vn ch t i vùng nh ó  Nên gán d = NULL; Gi i Thi u L p Trình 19
  21. Bài T ập int a[10] = {2,3,5,1,4,7,0}; int *p = a; cout << a[0] << *p << "\n"; 2 2 p++; 3 1 cout << *p << p[2] << "\n"; 1 9 p++; a[2] = 0; 1 3 cout << p[1] << *p << "\n"; p -= 2; cout << p[3] << p[1] << "\n"; Gi i Thi u L p Trình 20
  22. Hàm Tr ả Về Mảng  Ki u m ng không ư c phép là ki u tr v  Không h p l int[] someFunction();  Ph i tr v ki u con tr int * someFunction(); Gi i Thi u L p Trình 21
  23. Con Tr ỏ Trong C++  Con tr là kh i ki n th c c bi t quan tr ng trong C++  Ph i n m v ng khái ni m con tr c ng nh ư thao tác v i con tr  Con tr s ư c s d ng trong các ki u d li u ph c t p  INT 2203 C u trúc D li u & Gi i thu t Gi i Thi u L p Trình 22