1) đặc điểm kĩ thuật của biến cấu trúc
#prama pack là chỉ thị dịch nhằm để chỉ dẫn cho trình biên dịch tính toán chính xác kích thước của biến cấu trúc
-ký pháp truy xuất đến các trường ta dùng toán tử ->
- giá trị của các trường chia sẽ chung vùng nhớ(theo kiểu union)
- đây là 1 vấn đề khá khó khăn về vấn đề cấp phát nếu bạn nào làm chủ được phần này thì con trỏ các bạn sử dụng rất chắc chắn
sau đây mình sẽ minh họa về chương trình lưu danh sách đa giác vào tập tin
trước tiên chúng ta có :
typedef struct {
int x,y;
}point;//cấu trúc của 1 điểm trong không gian 2 chiều
typedef struct {
int n;//số đỉnh của 1 đa giác
point*vers;//đây là con trỏ sẽ quản lý dãy đỉnh của chúng ta
}polygon;//đây là cấu trúc của 1 đa giác
- đây sau khi đã có cấu trúc của 1 đa giác chúng ta sẽ tiến hành cấp phát cho nó vì mỗi đa giác sẽ có số đỉnh khác nhau chúng ta khai báo 1 hàm arrInit để khởi tạo cho cấu trúc đa giác giá trị ban đầu để chúng ta có thể sử dụng được nó.
void*arrInit(int nItem,int sizeItem)//hàm cấp phát cho 1 cấu trúc
{
void*aOrigin=NULL,*aData=NULL;// khai báo hai con trỏ có kiểu dữ liệu void
int sz=memSize(nItem,sizeItem);// cấp phát cho biến sz là size của cấu trúc
aOrigin=malloc(sz);//cấp phát để aOrigin được hệ điều hành cấp phát cho 1 vùng nhớ
if(aOrigin!=NULL)
{
memset(aOrigin,0,sz); //khởi tạo cho các giá trị của biến cấu trúc bằng 0
aData=data_addr(aOrigin);//khởi tạo size cho aData 
*(int*)nItem_addr(aData)=nItem;//khởi tạo và ép kiểu cho aData
*(int*)sizeItem_add(aData)=sizeItem;//lấy size cho aData
}
return aData;//trả về aData đã được khởi tạo và cấp phát
}
về hàm giải phóng bộ nhớ các bạn cũng cài đặt tương tự như vậy
sau đây chúng ta tìm cách đưa dữ liệu vào trong cấu trúc
với hàm polyListPush(Polygon*PolyList,int n,point p[])// chúng ta đưa vào 1 con trỏ đã được cấp phát và sau khi đưa thành công sẽ trả về địa chỉ của con trỏ
{
if(n<=0)
{
return polyList;//nếu n<=0 thì trả về  luôn khỏi cần bỏ vào
}
Polygon poly={n};khởi tạo cho cấu trúc n đỉnh
poly.Vers=(point*)calloc(n*sizeof(point))//cấp phát cho con trỏ giữ số đỉnh và khởi tạo cho các giá trị của nó là 0
for(int i=0;i
{
poly.Vers[i]=p[i];//gán từng đình cho cho cấu trúc
}
void*p=arrPushBack(PolyList,&poly)//bạn có thể tự viết hàm này với mục đích đưa các phần tử vào trong cấu trúc
giờ việc còn lại đơn giản là trả về cấu trúc p và ép kiểu nó thôi đơn giản quá phải không các bạn
return (polygon*) p;
}
chưa hết đâu chúng ta còn phải ghi nó lên tập tin nữa mà mà việc tập tin bằng ngôn ngữ c hơi lằng nhằng chút
void PolyListSave(Polygon*PolyList,char*fname)
{
FILE*fopen(fname,"wb");// viết lên tập tin nhị phân nha các bạn
int npoly=arrsize(polylish);
}
thôi để mai viết tiếp mệt wa!!