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


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Ệ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 DUNG
NỘI DUNG
Tin học đại cương
3
NỘI DUNG BÀI BỘ NHỚ ĐỘNG
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ớ

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

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);
}
}

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
KHÁI NIỆM
KHÁI NIỆM
Tin học đại cương
13

Cú pháp tổng quát:
struct [<tên cấu trúc>]
{
[<KDL> <tên biến [, tên biến, …]>];
[<KDL> <tên biến [, tên biến, …]>];

} [<danh sách các biến cấu trúc>];

<tên cấu trúc> và <danh sách các biến
cấu trúc> 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.
KHAI BÁO STRUCT
KHAI BÁO STRUCT
Tin học đại cương
14


sizeof(HOCSINH));
MẢNG VÀ CON TRỎ CẤU TRÚC
MẢNG VÀ CON TRỎ CẤU TRÚC
Tin học đại cương
16

Để 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;

Không nên dùng toán tử & đối với thành phần
cấu trúc.
TRUY XUẤT THÀNH PHẦN CẤU TRÚC
TRUY XUẤT THÀNH PHẦN CẤU TRÚC
Tin học đại cương
17

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ư:

void NhapHS(PTR_HOCSINH phs);
void XuatHS(HOCSINH hs);

Khi đó ta có thể gọi dùng hàm:
HOCSINH hs;
NhapHS(&hs);
XuatHS(hs);
KIỂU CẤU TRÚC VÀ HÀM
KIỂU CẤU TRÚC VÀ HÀM
Tin học đại cương
20
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tagHOCSINH
{
char sHoTen[50];
float fVan, fToan;
float fDTB;
}HOCSINH, *PTR_HOCSINH;
void NhapHS(PTR_HOCSINH phs, int stt);
void XuatHS(HOCSINH hs, int stt);
VÍ DỤ MINH HỌA
VÍ DỤ MINH HỌA
Tin học đại cương
21
void main()
{
int i, nSoHS;

strcpy(phs->sHoTen, hoten);
phs->fVan = van;
phs->fToan = toan;
phs->fDTB = (float)(van+toan)/2;
}
VÍ DỤ MINH HỌA
VÍ DỤ MINH HỌA
Tin học đại cương
23
void XuatHS(HOCSINH hs, int stt)
{
printf("\n\nHoc sinh thu %d: %s",
stt+1, hs.sHoTen);
printf("\nVan %.1f, Toan %.1f. DTB %.1f",
hs.fVan, hs.fToan, hs.fDTB);
}
VÍ DỤ MINH HỌA
VÍ DỤ MINH HỌA

24
www.uit.edu.vn


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status