HÀM TRÊN CÁC CẤU TRÚC VÀ VIỆC CẤP PHÁT BỘ NHỚ ĐỘNG

Một phần của tài liệu Ngôn ngữ C 2 (Trang 46 - 48)

Trong C, mối quan hệ giữa biến struct và hàm được hổ trợ đầy đủ các tính năng như hàm đối với các kiểu dữ liệu cơ bản khác.

1. Đối của hàm:

Đối của hàm Tham số thực

Biến cấu trúc Giá trị cấu trúc.

Con trỏ cấu trúc Địa chỉ của biến cấu trúc Mảng cấu trúc hình thức hoặc con trỏ cấu trúc Tên mảng cấu trúc

2. Kết quả trả về của hàm:

Hàm có thể trả về giá trị là: + Giá trị của một struct. + Con trỏ kiểu struct.

3. Cấp phát bộ nhớ động đối với kiểu struct:

Chúng ta có thể dùng hàm malloc( ) hoặc calloc( ) để cấp phát bộ nhớ động cho biến con trỏ struct trong lúc đang chạy chương trình và cũng có thể dùng hàm free( ) để thu hồi lại vùng nhớ.

4. Ví dụ:

- Xét kiểu cấu trúc person gồm 3 thành phần: + ht (họ tên) kiểu mảng char.

+ ns (năm sinh) kiểu struct ngay. + bl (bậc lương) kiểu float.

- Ta thiết kế 3 hàm thao tác trên kiểu person: + Hàm

void input(person *p); dùng để nhập dữ liệu cho một đối tượng kiểu person.

+ Hàm

void output(person p); dùng để in một đối tượng kiểu person.

+ Hàm

person* find1(char *ht,person *ds,int n);

có tác dụng tìm trong danh sách n nhân viên lưu trong con trỏ ds, người có tên cho trong ht. Hàm trả về con trỏ trỏ tới người tìm được hoặc trả về NULL nếu không tìm thấy.

#include<stdio.h> #include<conio.h> #include<alloc.h> #include<string.h> typedef struct { int ngay,thang,nam; }ngay; typedef struct { char ht[25]; ngay ns; float bl; }person; void input(person *p); void output(person p);

person* find1(char *ht, person *ds, int n);

void main( ) { int songuoi,i; char *ht; person *temp; person *ds=NULL; clrscr( );

printf("\nBan muon danh sach co bao nhieu nguoi?"); scanf("%d",&songuoi);

ds = calloc(songuoi,sizeof(person)); for(i=0;i<songuoi;i++)

input(ds+i);

printf("/************************************************/"); printf("\n\n TIM NGUOI");

printf("\nNhap vao ho ten nguoi can tim: "); fflush(stdin);

temp=find1(ht,ds,songuoi); if (temp!=NULL)

{

printf("\nNguoi can tim co ly lich nhu sau:"); output(*temp);

} else

printf("\nKhong tim thay nguoi nay");

printf("\n/************************************************/"); printf("\n\n DANH SACH NHAN SU");

for(i=0;i<songuoi;i++) output(*(ds+i)); free(ds); getch( ); } void input(person *p) { float luong; fflush(stdin);

printf("\nNhap vao ho ten: ");gets(p->ht); printf("\nNhap vao ngay sinh: ");

printf("Ngay: "); scanf("%d",&p->ns.ngay); printf("Thang: "); scanf("%d",&p->ns.thang); printf("Nam: "); scanf("%d",&p->ns.nam);

printf("\nNhap vao luong: "); scanf("%f",&luong); p->bl=luong;

}

void output(person p) {

printf("\nHo ten: %s",p.ht);

printf("\nNgay thang nam sinh: %d-%d-%d",p.ns.ngay,p.ns.thang,p.ns.nam); printf("\nBac luong: %6.0f",p.bl);

}

person* find1(char *ht, person *ds, int n) { person *temp=NULL; int i; for(i=0;i<n;i++) if (strcmpi(ds[i].ht,ht)= =0) temp = (ds+i); return temp; }

Một phần của tài liệu Ngôn ngữ C 2 (Trang 46 - 48)

Tải bản đầy đủ (DOC)

(57 trang)
w