一个程序通常围绕这两个方面进行:数据存储和数据操作;
结构体是一种数据类型,用来将不同类型的数据组合在一起,决定数据的存储问题(比如在内存占多大的空间来,系统怎么解释存储数据的位数据啦等等)同int, double 等编译器内置的数据类型基本相同,只不过结构体是用户自己定义的数据类型而已,例如:
struct student
{
int NO;
};
函数是对数据的一种操作;
#includestdio.h
struct test
{
int kaohao;
char name[10];
int age;
float chengji;
int i=0;
float max=0;
struct test maxs;
if(k[i].chengjimax)
max=k[i].chengji;
maxs=k[i];
}
printf("最高成绩的人是:%s\n成绩为%f\n",maxs.name,maxs.chengji);
int main()
//继续加油啊!
best(k);
return 0;
#include?stdio.h
#include?string.h
struct?STUDENT
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);
sort(a,N,sizeof(*a),cmp_name);
return?0;
void?scan(struct?STUDENT?*a,int?n)
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)
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;
如果在结构体定义时,或定义后取了别名,可以用别名,否则不能省"struct"
如:typedef
struct
Teacher
TEACHER;
则可以用TEACHER
代替struct
C语言的结构体没有存取控制权限,相当于C++存取控制权限中的public:
追问:
那struct
*creat(struct
*head);
和Teacher
一样吗?如果不一样的话有什么区别呢?
追答:
是一样的,struct
和Teacher只是同一东西的两种不同写法.
STU?f?(STU?a)
int?i;
strcpy(?a.name,?b.name?);
a.sex?=?b.sex;
好了,全部的将b中的数据赋值给a,相当于a=b;这样的一个操作
return?a;?
main()
d?=?f(c);//这里传的c是个复制品(传递的不是结构体指针),所以c不会变,d接收f()函数的返回值,因为返回值的内容是f()中的b的值,所以,d与c不同
printf?("%s,%c,%d,%d,?",?d.name,?d.sex,?d.score[0],?d.score[1]);
printf?("%s,%c,%d,%d\n",?c.name,?c.sex,?c.score[0],?c.score[1]);
以上就是土嘎嘎小编大虾米为大家整理的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!