十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
改动如下:
在含山等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、成都网站建设 网站设计制作定制制作,公司网站建设,企业网站建设,成都品牌网站建设,成都营销网站建设,成都外贸网站建设,含山网站建设费用合理。
#include stdio.h
#includestring.h
enum gender
{
male,famale
};
typedef struct course
{
char coursename[10];
int coursescore;
}STC;
typedef struct student
{
long studentnumber;
char name[20];
int age;
enum gender sex;
STC coursescore[3];
struct student *next;
void (*ptooutput)(struct student*); // 改动1:改成指针,与output函数匹配
}STD;
void output(struct student *p)
{
int i;
printf("学生%s:\n",p-name);
printf("他的学号是%ld\n",p-studentnumber); // 改动2:学号
printf("他的年龄是%d\n",p-age); // 改动3:年龄
if(p-sex==0)
{printf("他的性别是男\n");}
else
{printf("他的性别是女\n");}
for(i=0;i3;i++)
{
printf("他的%s",p-coursescore[i].coursename);
printf("成绩是%d\n",p-coursescore[i].coursescore);
}
}
main()
{
STD a;
a.studentnumber=1011110201;
strcpy(a.name,"叶超");
a.age=19;
a.sex=male;
strcpy(a.coursescore[0].coursename,"数学");
a.coursescore[0].coursescore=87;
strcpy(a.coursescore[1].coursename,"英语");
a.coursescore[1].coursescore=72;
strcpy(a.coursescore[2].coursename,"C语言");
a.coursescore[2].coursescore=66;
a.ptooutput = output; // 改动4:设置打印函数指针
a.ptooutput(a); // 改动5:输入参数为指针
}
首先解释一下
st
的问题吧:st
就是取结构体的
st
的地址传给结构体内的函数
p
和
o,
根据前面
st
的定义,也就是传给
和
power。这样
和
power
函数就可以读取结构体中的
i
和
x
值。
然后沿着各个思路,可以写出
和
power
函数,如下:
void
print(ST
*st){
printf
("%g",
st-x);
}
void
power(ST
*st){
int
k;
double
y=1;
for
(k=0;k
i;k++)
y*=st-x;
st-x
=
y;
}
不过这里有个问题,就是你之前的
struct
中定义的函数指针是没有参数的,但是主函数调用时是有参数的,这是矛盾的呀。要改一下:
struct
ST{
int
i;
double
x;
void
(*o)(ST*);
void
(*p)(ST*);
}
;
就没有问题了。
//在结构体中包含函数指针,
//这样,可以使用结构体,调用函数。
//这个有点像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);
}