c语言结构体函数指针 结构体中函数指针调用

C语言结构体程序子函数指针的使用有多处错误,主程序中只有一处,但调用函数错得挺多的 , 最主要的是对结构指针的运用 ,
stu *p 下,引用其数组不能用(*p)[xx],因为p本身就是结构数组的首址,所以直接用p[xx]即可访问定义的所有单元 。
以下将你的程序依原风格进行修改,主程序中将修改前的错误代码罗列于右 , 而order函数因为修改的地方多所以不再提示修改处:
#includestdio.h
【c语言结构体函数指针 结构体中函数指针调用】typedef struct student
{
int num;
char name[20];
int a,b,c;
double ave;
}stu;
stu order(stu *p,int n);
int main()
{
stu s[6];/*改为s[5]*/
int i;
for(i=0;i5;i)
{
printf("input num:");
scanf("%d",s[i].num);
getchar();
printf("name:");
scanf("%s",s[i].name);/*原为scanf("%s",s[i].name); */
printf("a\tb\tc\n");
scanf("%d%d%d",s[i].a,s[i].b,s[i].c);s[i].ave=(s[i].a s[i].b s[i].c)*1.0/3;
}
order(s,5);
printf("num\tname\ta\tb\tc\n");
for(i=0;i5;i)
{
printf("%d\t%s\t%d\t%d\t%d\t%lf\n",s[i].num,s[i].name,s[i].a,s[i].b,s[i].c,s[i].ave);
}
return 0;
}
stu order(stu *p,int n)
{
int j,k;
stu index;
for(j=0;jn-1;j)
for(k=j 1;kn;k)
if(p[j].avep[k].ave)
{
index=p[j];
p[j]=p[k];
p[k]=index;
}
}
c语言结构体函数指针怎么赋值指针就是指向内存的某个地址的一个变量 。
结构体指针就是这个指针变量的值必须指向存放该结构体的内存位置 。
当这个指针没有任何指向时,可以赋值为null值,但是改指针不可使用,程序中应该做判断 。下面是一些赋值演示 。
struct student{
int id;
int score;
} aaa;
struct student *p = null;//结构体指针p初始化赋值为null
struct student *p2=aaa;//p2指向aaa
struct student *p3=(struct student *)malloc(sizeof(struct student));//内存中申请一个结构体空间,并将地址强制转换为结构体指针变量赋值给p3
C语言结构体内部的函数指针有什么意义//在结构体中包含函数指针,
//这样 , 可以使用结构体,调用函数 。
//这个有点像C的面向对象的类
//十分好用 。
#include "stdio.h"
struct DEMO
{
int x,y;
int (*func)(int,int); //函数指针
};
int add2(int x,int y)
{
return x y;
}
int main()
{
int ret=0;
struct DEMO demo;
demo.func=add2; //结构体函数指针赋值
ret=demo.func(3,4);
printf("func(3,4)=%d\n",ret);
}
c语言结构体函数指针的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于结构体中函数指针调用、c语言结构体函数指针的信息别忘了在本站进行查找喔 。

    推荐阅读