intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Tin học đại cương - bài 10: bộ nhớ động kiểu dữ liệu co cấu trúc

Chia sẻ: Lê Trinh | Ngày: | Loại File: PPT | Số trang:24

61
lượt xem
4
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Biến động là biến được “tạo” ra khi chạy chương trình. Thông qua con trỏ, vùng nhớ biến được cấp phát và quản lý. Các hàm thao tác vùng nhớ trên C được định nghĩa trong thư viện stdlib.h hoặc alloc.h Các hàm cấp phát và giải phóng bộ nhớ Hàm malloc Hàm calloc Hàm realloc Hàm free

Chủ đề:
Lưu

Nội dung Text: Tin học đại cương - bài 10: bộ nhớ động kiểu dữ liệu co cấu trúc

  1. www.uit.edu.vn TIN HỌC ĐẠI CƯƠNG BÀI 10 BỘ NHỚ ĐỘNG KIỂU DỮ LIỆU CÓ CẤU TRÚC 1
  2. NỘI DUNG 9 CẤP PHÁT VÀ GIẢI PHÓNG BỘ NHỚ ĐỘNG Tin học đại cương 2
  3. NỘI DUNG BÀI BỘ NHỚ ĐỘNG  Khái niệm biến “động”  Các hàm cấp phát bộ nhớ  Hàm malloc  Hàm calloc  Hàm realloc  Hàm giải phóng bộ nhớ  Hàm free Tin học đại cương 3
  4. BIẾN ĐỘNG  Biến động là biến được “tạo” ra khi chạy chương trình. Thông qua con trỏ, vùng nh ớ biến được cấp phát và quản lý.  Các hàm thao tác vùng nhớ trên C được định nghĩa trong thư viện stdlib.h hoặc alloc.h  Các hàm cấp phát và giải phóng bộ nhớ  Hàm malloc  Hàm calloc Tin học đại cương  Hàm realloc  Hàm free 4
  5. HÀM MALLOC / HÀM FREE  Chức năng của hàm malloc là gọi cấp phát một vùng nhớ có kích thước size: void *malloc(size_t size);  Ví dụ: int *p; p=(int *) malloc(100); p=(int *) malloc(80*sizeof(int));  Hàm free được dùng để giải phóng một vùng nhớ đã được cấp phát thông qua con trỏ prt: Tin học đại cương void free(void *ptr); 5
  6. VÍ DỤ #include #include #include void main(void) { char *str; /* allocate memory for string */ str = (char *) malloc(10); /* copy "Hello" to string */ strcpy(str, "Hello"); /* display string */ printf("String is %s\n", str); Tin học đại cương /* free memory */ free(str); } 6
  7. HÀM CALLOC VÀ REALLOC  Bên cạnh hàm malloc, một vùng nhớ còn có thể được cấp phát bằng hàm calloc và cấp phát lại bằng hàm realloc.  Hàm calloc cấp phát một vùng nhớ có kích thước nitems* size bytes. void *calloc(size_t nitems, size_t size);  Hàm realloc điều chỉnh lại vùng nhớ đã được cấp phát block, với kích thước mới là size bytes. Tin học đại cương void *realloc(void* block, size_t size); 7
  8. BỘ NHỚ ĐỘNG VÀ MẢNG 1 CHIỀU  Cấp phát vùng nhớ n phần tử cho biến con trỏ int *a : a = (int *)malloc(n*sizeof(int)); a =(int *)calloc(n, sizeof(int));  Kiểm tra cấp phát thành công và thực hiện các thao tác tiếp (như đối với mảng): if(a!=NULL) { // dùng như mảng cho a[0], a[1], … ………… Tin học đại cương free(a); } 8
  9. BỘ NHỚ ĐỘNG VÀ MẢNG 2 CHIỀU a = (int **)malloc(m*sizeof(int *)); if(a!=NULL) { kt=0; for(i=0; i
  10. NỘI DUNG 10 KIỂU DỮ LIỆU CÓ CẤU TRÚC Tin học đại cương 10
  11. NỘI DUNG BÀI KIỂU CẤU TRÚC  Khái niệm  Khai báo kiểu cấu trúc struct  Mảng và con trỏ cấu trúc  Truy xuất các thành phần của cấu trúc  Kiểu cấu trúc và hàm  Ví dụ minh họa Tin học đại cương 11
  12. KHÁI NIỆM  Kiểu cấu trúc (hay bản ghi đối với một số NNLT khác) là dạng dữ liệu thường được định nghĩa để mô tả dữ liệu có nhiều thành phần thuộc nhiều kiểu dữ liệu khác nhau.  Kiểu dữ liệu của từng thành phần có th ể là các kiểu dữ liệu cơ bản (ký tự, số nguyên, số thực), con trỏ, mảng, và thậm chí là một kiểu cấu trúc.  Kiểu cấu trúc trên C được định nghĩa thông qua từ khoá struct Tin học đại cương 12
  13. KHAI BÁO STRUCT  Cú pháp tổng quát: struct [] { [ ]; [ ]; … } [];  và là tùy chọn nhưng ít nhất phải có một trong 2 được khai báo.  Các biến cùng kiểu KDL có thể khai báo cách Tin học đại cương nhau bởi dấu phẩy. Các KDL khác nhau khai báo riêng cách nhau bởi dấu chấm phẩy. 13
  14. KHAI BÁO STRUCT  Trong C, ta có thể đặt cho một thông qua từ khoá typedef: typedef ;  Ví dụ: typedef struct tagHocSinh { char sHoTen[50]; int nToan, nVan; float fDTB; } HOCSINH, *PTR_HOCSINH; Tin học đại cương  Khi đó ta có thể khai báo một biến hs như sau: HOCSINH hs; 14
  15. MẢNG VÀ CON TRỎ CẤU TRÚC  Các thao tác trên mảng, con trỏ và vùng nhớ động cho các biến cấu trúc hoàn toàn tương tự như đối với các biến có kiểu dữ liệu thông thường.  Ví dụ: HOCSINH hs, manghs[20]; PTR_HOCSINH phs1, phs2; manghs[5] = hs; phs1 = &hs; Tin học đại cương phs2 = (PTR_HOCSINH)calloc(10, sizeof(HOCSINH)); 15
  16. TRUY XUẤT THÀNH PHẦN CẤU TRÚC  Để truy xuất đến một thành phần của biến cấu trúc tĩnh ta dùng toán tử chấm “.” và dùng toán t ử “->” đối với biến con trỏ.  Ví dụ: HOCSINH hs; hs.sHoTen=“Phúc Khang An”; hs.nToan=10; hs.nVan = 7; hs.fDTB = (hs.nToan + hs.nVan)/ 2.0; Tin học đại cương  Không nên dùng toán tử & đối với thành phần cấu trúc. 16
  17. TRUY XUẤT THÀNH PHẦN CẤU TRÚC  Với các biến: HOCSINH hs; PTR_HOCSINH phs = &hs;  Ta có thể truy xuất đến thành phần sHoTen của cấu trúc bằng các cách tương đương như: gets(hs.sHoTen); gets(phs->sHoTen); gets((*phs).sHoTen); Tin học đại cương 17
  18. TRUY XUẤT THÀNH PHẦN CẤU TRÚC  Áp dụng cho biến mảng cấu trúc: HOCSINH dshs[100]; PTR_HOCSINH pdshs = dshs;  Ta có thể truy xuất đến thành phần sHoTen của cấu trúc bằng các cách tương đương như: gets(dshs[i].sHoTen); gets(pdshs[i].sHoTen); gets(*(dshs+i).sHoTen); gets(*(pdshs+i).sHoTen); Tin học đại cương gets(pdshs->sHoTen); pdshs++; gets((*pdshs).sHoTen); pdshs++; 18
  19. KIỂU CẤU TRÚC VÀ HÀM  Các thao tác trên hàm cho biến cấu trúc hoàn toàn tương tự cho biến thông thường. Chẳng hạn truyền tham biến và tham trị như sau:  Prototype: void NhapHS(PTR_HOCSINH phs); void XuatHS(HOCSINH hs);  Khi đó ta có thể gọi dùng hàm: HOCSINH hs; Tin học đại cương NhapHS(&hs); XuatHS(hs); 19
  20. VÍ DỤ MINH HỌA #include #include #include #include typedef struct tagHOCSINH { char sHoTen[50]; float fVan, fToan; float fDTB; }HOCSINH, *PTR_HOCSINH; void NhapHS(PTR_HOCSINH phs, int stt); Tin học đại cương void XuatHS(HOCSINH hs, int stt); 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2