重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#define uchar unsigned char
网站建设公司,为您提供网站建设,网站制作,网页设计及定制网站建设服务,专注于成都定制网站,高端网页制作,对成都铜雕雕塑等多个行业拥有丰富的网站建设经验的网站建设公司。专业网站设计,网站优化推广哪家好,专业成都网站推广优化,H5建站,响应式网站。
void (*current_operation_index)();
void fun0()
{
printf("hello world!\n");
}
typedef struct
{
uchar current;
uchar up;//上键
uchar down;//下键
uchar enter;//确认键
uchar back;//返回键
void (*current_operation)();
}key_table;
key_table table={0,0,0,1,0,(*fun0)};
void main()
{
current_operation_index=table.current_operation;
(*current_operation_index)();
}
如果在结构体定义时,或定义后取了别名,可以用别名,否则不能省“struct”
如:typedef
struct
Teacher
TEACHER;
则可以用TEACHER
代替struct
Teacher
C语言的结构体没有存取控制权限,相当于C++存取控制权限中的public:
追问:
那struct
Teacher
*creat(struct
Teacher
*head);
和Teacher
*creat(struct
Teacher
*head);
一样吗?如果不一样的话有什么区别呢?
追答:
是一样的,struct
Teacher
和Teacher只是同一东西的两种不同写法。
表示这个函数的返回值 是结构体
这个函数 Gear_state
参数两个, 第一个是u8, 第二个是Gear_Poisition_TY结构体。
返回值类型为结构体类型。
比如 你可以这样调用
Gear_Poisition_TY a,b;
对a初始化 或者赋值。
然后
b=Gear_state(0, a);
#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;
}
void f(A c) /* 注意:c结构变量名 但这个c也是个复制品,与原实参只是一样的内容,却不是同一个!! */ 所以结果还是a={1,2}; 答案为B