Thông tin tài liệu:
Bài giảng Kỹ thuật lập trình: Con trỏ nâng cao, được biên soạn gồm các nội dung chính sau Quản lý bộ nhớ; Con trỏ nhiều cấp; Các loại con trỏ khác. Mời các bạn cùng tham khảo!
Nội dung trích xuất từ tài liệu:
Bài giảng Kỹ thuật lập trình: Con trỏ nâng cao - Nguyễn Minh HuyCon trỏ nâng cao GV. Nguyễn Minh HuyKỹ thuật lập trình - Nguyễn Minh Huy 1Nội dung Quản lý bộ nhớ. nhớ. Con trỏ nhiều cấp. cấp. Các loại con trỏ khác. khác.Kỹ thuật lập trình - Nguyễn Minh Huy 2Nội dung Quản lý bộ nhớ. nhớ. Con trỏ nhiều cấp. cấp. Các loại con trỏ khác. khác.Kỹ thuật lập trình - Nguyễn Minh Huy 3Quản lý bộ nhớ Cấp phát bộ nhớ trong C: Xin một vùng nhớ trong RAM để sử dụng. dụng. Lệnh malloc: thư viện malloc: malloc.h> Cú pháp: malloc(); pháp: malloc( phát> Trả về: địa chỉ vùng nhớ được cấp. về: cấp. int *p = (int *) malloc( 2 * sizeof(int) ); (int malloc( sizeof(int) PhanSo *q = (PhanSo *) malloc( 2 * sizeof(PhanSo) ); (PhanSo malloc( sizeof(PhanSo) 44 45 46 47 72 73 74 75 76 77 78 79p 72 0 0 0 ? ? ? ? ? ? ? ? p+1 tu mau tu mau 33 34 35 36 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70q 55 0 0 0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? q+1Kỹ thuật lập trình - Nguyễn Minh Huy 4Quản lý bộ nhớ Thu hồi bộ nhớ trong C: Trả lại vùng nhớ đã xin của RAM. Quy tắc quản lý bộ nhớ của C: Tự thu hồi vùng nhớ khai báo biến. biến. Không thu hồi vùng nhớ tự cấp phát. phát. Lập trình viên phải tự thu hồi vùng nhớ cấp phát. phát. Quên thu hồi “Rò rỉ” bộ nhớ (memory leak). rỉ” Lệnh free: thư viện malloc.h> Cú pháp: free(); pháp: free( float *r = (float *) malloc( 20 * sizeof(float) ); malloc( sizeof(float) free(r free(r);Kỹ thuật lập trình - Nguyễn Minh Huy 5Quản lý bộ nhớ Cấp phát và thu hồi trong C++: C++ tương thích với C (hỗ trợ malloc). (hỗ malloc). C++ có lệnh cấp phát và thu hồi mới. mới. Toán tử new: cấp phát bộ nhớ. new: nhớ. Cú pháp: new []; pháp: liệu> tử> Trả về: địa chỉ vùng nhớ được cấp. về: cấp. Toán tử delete: thu hồi bộ nhớ. delete: nhớ. Cú pháp: delete ; pháp: nhớ>; int *p = new int [ 10 ]; PhanSo *q = new PhanSo [ 30 ]; delete [ ]p; delete [ ]q;Kỹ thuật lập trình - Nguyễn Minh Huy 6Quản lý bộ nhớ Mảng động một chiều: chiều: Không cần biết số phần tử khi khai báo. báo. Cấp phát vùng nhớ khi cần. cần. Thu hồi vùng nhớ khi sử dụng xong. xong. Sử dụng bộ nhớ hiệu quả hơn. hơn. void nhapMang(int *&a, int &n) { nhapMang( *&a, &n) void main() main() printf(“Nhap printf(“Nhap so phan tu: “); tu: { scanf(“%d”, &n); scanf(“%d”, &n); int *a; *a; a = new int [ n ]; int n; for (int i = 0; i < n; i++) { (int nhapMang(a, nhapMang(a, n); printf(“Nhap printf(“Nhap phan tu %d:”, i); delete [ ]a; scanf(“%d”, scanf(“%d”, &a[ i ]); } } }Kỹ thuật lập trình - Nguyễn Minh Huy 7Nội dung Quản lý bộ nhớ. nhớ. Con trỏ nhiều cấp. cấp. Các loại con trỏ khác. khác.Kỹ thuật lập trình - Nguyễn Minh Huy 8Con trỏ nhiều cấp Địa chỉ của con trỏ: trỏ: Mỗi biến có một địa chỉ. chỉ. Biến int có kiểu địa chỉ int *. Biến con trỏ cũng có địa chỉ. chỉ. Biến int * có kiểu địa chỉ là gì? ...