Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 24 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
24
Dung lượng
644,5 KB
Nội dung
1
TIN HỌC ĐẠI CƯƠNG
www.uit.edu.vn
BÀI 10
BÀI 10
BỘ NHỚ ĐỘNG
BỘ NHỚ ĐỘNG
KIỂU DỮLIỆUCÓCẤU TRÚC
KIỂU DỮLIỆUCÓCẤU TRÚC
Tin học đại cương
2
CẤP PHÁT VÀ GIẢI PHÓNG BỘNHỚ ĐỘNG9
NỘI DUNG
NỘI DUNG
Tin học đại cương
3
NỘI DUNG BÀIBỘNHỚ ĐỘNG
NỘI DUNG BÀIBỘ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
4
BIẾN ĐỘNG
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
Hàm realloc
Hàm free
Tin học đại cương
5
HÀM MALLOC / HÀM FREE
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:
void free(void *ptr);
Tin học đại cương
6
#include <string.h>
#include <stdio.h>
#include <alloc.h>
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);
/* free memory */
free(str);
}
VÍ DỤ
VÍ DỤ
Tin học đại cương
7
HÀM CALLOC VÀ REALLOC
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.
void *realloc(void* block, size_t
size);
Tin học đại cương
8
BỘ NHỚĐỘNG VÀ MẢNG 1 CHIỀU
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], …
…………
free(a);
}
Tin học đại cương
9
BỘ NHỚĐỘNG VÀ MẢNG 2 CHIỀU
BỘ NHỚĐỘNG VÀ MẢNG 2 CHIỀU
a = (int **)malloc(m*sizeof(int *));
if(a!=NULL)
{ kt=0;
for(i=0; i<m; i++)
a[i]=NULL;
for(i=0; i<m; i++)
{
if(kt==1) break;
a[i]=(int *)malloc(n*sizeof(int));
if(a[i]==NULL) kt=1;
}
if(kt==0)
{
/* dùng như mảng 2 chiều a[i][j] */
………
for(i=0; i<m; i++)
if(a[i]!=NULL) free(a[i];
free(a);
}
}
Tin học đại cương
10
KIỂU DỮLIỆUCÓCẤU TRÚC10
NỘI DUNG
NỘI DUNG
[...]...NỘI DUNG BÀIKIỂUCẤUTRÚC Khái niệm Khai báo kiểucấutrúc struct Mảng và con trỏ cấutrúc Truy xuất các thành phần của cấutrúc Kiểucấutrúc và hàm Tin học đại cương Ví dụ minh họa 11 KHÁI NIỆM Kiểucấutrú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ệucó nhiều thành phần thuộc nhiều kiểudữliệu khác nhau Kiểudữliệu của từng... thể là các kiểudữliệucơ bản (ký tự, số nguyên, số thực), con trỏ, mảng, và thậm chí là một kiểucấutrúc Tin học đại cương Kiểucấutrúc trên C được định nghĩa thông qua từ khoá struct 12 KHAI BÁO STRUCT Cú pháp tổng quát: struct [ ] { [ ]; [ ]; … } [ ]; Tin học đại cương và... MẢNG VÀ CON TRỎ CẤUTRÚC Các thao tác trên mảng, con trỏ và vùng nhớđộng cho các biến cấutrúc hoàn toàn tương tự như đối với các biến cókiểudữliệu thông thường Ví dụ: HOCSINH hs, manghs[20]; PTR_HOCSINH phs1, phs2; manghs[5] = hs; Tin học đại cương phs1 = &hs; phs2 = (PTR_HOCSINH)calloc(10, sizeof(HOCSINH)); 15 TRUY XUẤT THÀNH PHẦN CẤUTRÚC Để truy xuất đến một thành phần của biến cấu trúc. .. tử chấm “.” và dùng toán tử -> ” đối với biến con trỏ Tin học đại cương Ví dụ: HOCSINH hs; hs.sHoTen=“Phúc Khang An”; hs.nToan=10; hs.nVan = 7; hs.fDTB = (hs.nToan + hs.nVan)/ 2.0; Không nên dùng toán tử & đối với thành phần cấutrúc 16 TRUY XUẤT THÀNH PHẦN CẤUTRÚ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ấutrúc bằng các cách tương đương... Tin học đại cương gets(phs->sHoTen); gets((*phs).sHoTen); 17 TRUY XUẤT THÀNH PHẦN CẤUTRÚC Áp dụng cho biến mảng cấu trúc: HOCSINH dshs[100]; PTR_HOCSINH pdshs = dshs; Tin học đại cương Ta có thể truy xuất đến thành phần sHoTen của cấutrú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); gets(pdshs->sHoTen); pdshs++; gets((*pdshs).sHoTen);... cấu trúc> 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 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 KHAI BÁO STRUCT Trong C, ta có thể đặt cho một thông qua từ khoá typedef: typedef ; Tin học đại cương Ví dụ:... gets((*pdshs).sHoTen); pdshs++; 18 KIỂUCẤUTRÚC VÀ HÀM Các thao tác trên hàm cho biến cấutrú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: Tin học đại cương HOCSINH hs; NhapHS(&hs); XuatHS(hs); 19 VÍ DỤ MINH HỌA #include #include #include #include ... flushall(); printf("\nHoc sinh thu %d:", stt+1); printf("\nHo Ten: "); gets(hoten); printf("Diem van: "); scanf("%f", &van); printf("Diem toan: "); scanf("%f", &toan); strcpy(phs->sHoTen, hoten); phs->fVan = van; phs->fToan = toan; phs->fDTB = (float)(van+toan)/2; } 22 VÍ DỤ MINH HỌA Tin học đại cương void XuatHS(HOCSINH hs, int stt) { printf("\n\nHoc sinh thu %d: %s", stt+1, hs.sHoTen); printf("\nVan %.1f, . CƯƠNG
www.uit.edu.vn
BÀI 10
BÀI 10
BỘ NHỚ ĐỘNG
BỘ NHỚ ĐỘNG
KIỂU DỮ LIỆU CÓ CẤU TRÚC
KIỂU DỮ LIỆU CÓ CẤU TRÚC
Tin học đại cương
2
CẤP PHÁT VÀ GIẢI PHÓNG BỘ NHỚ ĐỘNG9
NỘI. phần của cấu trúc
Kiểu cấu trúc và hàm
Ví dụ minh họa
NỘI DUNG BÀI KIỂU CẤU TRÚC
NỘI DUNG BÀI KIỂU CẤU TRÚC
Tin học đại cương
12
Kiểu cấu trúc (hay