在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.
结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构.结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问.
结构体作用:
结构体和其他类型基础数据类型一样,例如int类型、char类型,只不过结构体可以做成你想要的数据类型.以方便日后的使用.
在实际项目中,结构体是大量存在的.研发人员常使用结构体来封装一些属性来组成新的类型.由于C语言内部程序比较简单,研发人员通常使用结构体创造新的"属性",其目的是简化运算.
结构体在函数中的作用不是简便,其最主要的作用就是封装.封装的好处就是可以再次利用.让使用者不必关心这个是什么,只要根据定义使用就可以了.
c语言函数可以返回结构体,操作方法如下:
①.、首先在电脑中打开visual studio新建项目,给这个结构体取个名字叫student.
#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只是同一东西的两种不同写法.
C语言中结构体和函数有着本质上的不同.
结构体是用户自己定义的一中数据类型,比如说你想要把学生信息作为一个整体存放在一个数据类型中,可以定义结构体,其中某个成员存放学号,某个存放姓名等等.
但是函数就完全不同了,函数是为了实现某种功能,比如你要在一堆学生中寻找某一个学生可以用函数来实现.
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]);
以上就是土嘎嘎小编大虾米为大家整理的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!