一個程序通常圍繞這兩個方面進行:數(shù)據(jù)存儲和數(shù)據(jù)操作;
太白ssl適用于網站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
結構體是一種數(shù)據(jù)類型,用來將不同類型的數(shù)據(jù)組合在一起,決定數(shù)據(jù)的存儲問題(比如在內存占多大的空間來,系統(tǒng)怎么解釋存儲數(shù)據(jù)的位數(shù)據(jù)啦等等)同int, double 等編譯器內置的數(shù)據(jù)類型基本相同,只不過結構體是用戶自己定義的數(shù)據(jù)類型而已,例如:
struct student
{
char name[20];
int NO;
};
函數(shù)是對數(shù)據(jù)的一種操作;
如果在結構體定義時,或定義后取了別名,可以用別名,否則不能省“struct”
如:typedef
struct
Teacher
TEACHER;
則可以用TEACHER
代替struct
Teacher
C語言的結構體沒有存取控制權限,相當于C++存取控制權限中的public:
追問:
那struct
Teacher
*creat(struct
Teacher
*head);
和Teacher
*creat(struct
Teacher
*head);
一樣嗎?如果不一樣的話有什么區(qū)別呢?
追答:
是一樣的,struct
Teacher
和Teacher只是同一東西的兩種不同寫法。
#include?stdio.h
#include?string.h
#define?N?(5)
struct?STUDENT
{
char?name[20];
int?age;
float?chinese,math;
};
void?scan(struct?STUDENT?*a,int?n);
void?print(struct?STUDENT?*a,int?n);
void?sort(void?*a,int?n,int?size,int?(*cmp)(void?*,void?*));
int?cmp_score(void?*a,void?*b);
int?cmp_chinese(void?*a,void?*b);
int?cmp_name(void?*a,void?*b);
int?main()
{
struct?STUDENT?a[N];
int?i;
scan(a,N);
sort(a,N,sizeof(*a),cmp_score);
print(a,N);
sort(a,N,sizeof(*a),cmp_chinese);
print(a,N);
sort(a,N,sizeof(*a),cmp_name);
print(a,N);
return?0;
}
void?scan(struct?STUDENT?*a,int?n)
{
int?i;
for(i=0;in;++i)
{
scanf("\n%s?%d?%f?%f",a[i].name,a[i].age,a[i].chinese,a[i].math);
}
}
void?print(struct?STUDENT?*a,int?n)
{
int?i;
for(i=0;in;++i)
{
printf("%s?%d?%f?%f\n",a[i].name,a[i].age,a[i].chinese,a[i].math);
}
}
void?sort(void?*a,int?n,int?size,int?(*cmp)(void?*,void?*))
{
int?i,j;
void?*t=malloc(size);
for(i=0;in-1;++i)
{
for(j=0;jn-i-1;++j)
{
if(cmp(a+size*j,a+size*(j+1)))
{
memcpy(t,a+size*j,size);
memcpy(a+size*j,a+size*(j+1),size);
memcpy(a+size*(j+1),t,size);
}
}
}
free(t);
}
int?cmp_score(void?*a,void?*b)
{
return?((struct?STUDENT?*)a)-chinese+((struct?STUDENT?*)a)-math((struct?STUDENT?*)b)-chinese+((struct?STUDENT?*)b)-math;
}
int?cmp_chinese(void?*a,void?*b)
{
return?((struct?STUDENT?*)a)-chinese((struct?STUDENT?*)b)-chinese;
}
int?cmp_name(void?*a,void?*b)
{
return?strcmp(((struct?STUDENT?*)a)-name,((struct?STUDENT?*)b)-name)0;
}