当前位置:首页 » 编程语言 » c语言结构体函数指针

c语言结构体函数指针

发布时间: 2022-09-12 01:09:56

‘壹’ c语言结构体内部的函数指针有什么意义

//在结构体中包含函数指针,
//这样,可以使用结构体,调用函数。
//这个有点像C++的面向对象的类
//十分好用。
#include"stdio.h"
structDEMO
{
intx,y;
int(*func)(int,int);//函数指针
};
intadd2(intx,inty)
{
returnx+y;
}
intmain()
{
intret=0;
structDEMOdemo;
demo.func=&add2;//结构体函数指针赋值
ret=demo.func(3,4);
printf("func(3,4)=%d ",ret);
}

‘贰’ C语言中如何在结构体里写函数,指向函数指针问题。

改动如下:
#include <stdio.h>
#include<string.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;i<3;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:输入参数为指针
}

‘叁’ c语言如何给结构体指针赋值

结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。

举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数

#include <stdio.h>

#include <stdlib.h>

struct student //建立结构体,学号,姓名,3门课的分数

{

int num;

char name[10];

int score[3];

}Stu[5]; //初始化,一共5个学生的数据

void getScore(struct student * p) //函数:向结构体读取分数,一共三门课

{

int i, j;

for (i = 0; i < 5; i++)

for (j = 0; j < 3; j++)

scanf_s("%d", (&(p+i)->score[j]));

}

void getNum(struct student * p) //函数:向结构体读取学号

{

int i;

for (i = 0; i < 5;i++)

scanf_s("%d", &(p + i)->num);

}

void getName(struct student * p) //函数:向结构体读取姓名

{

int i;

for (i = 0; i < 5; i++)

scanf("%s", &(p + i)->name);

}

int main()

{

int i, j, average[3] = { 0 }; //average数组储存每门课的平均分

getNum(Stu); //函数调用

getName(Stu);

getScore(Stu);

for (j = 0; j < 3; j++)

{

for (i = 0; i < 5; i++)

average[j] += Stu[i].score[j];

}

for (i = 0; i < 5; i++)

{

printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name); //依次打印学号 姓名

//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);

for (j = 0; j < 3; j++) //打印三门课的分数

printf(" %d", Stu[i].score[j]);

printf(" ");

}

printf("average:");

for (i = 0; i < 3; i++)

printf("%f ", (float)average[i]/5); //打印三门课平均分

printf(" ");

system("pause");

return 0;

}

如:

scanf("%c%c%c",&a,&b,&c);

输入为:

d e f

则把'd'赋予a, ' '(空格)赋予b,'e'赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把' '作为下一个字符送给b。

只有当输入为:def(字符间无空格) 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。

‘肆’ c语言函数指针作为结构体的问题

首先解释一下
&st
的问题吧:&st
就是取结构体的
st
的地址传给结构体内的函数
p

o,
根据前面
st
的定义,也就是传给
print

power。这样
print

power
函数就可以读取结构体中的
i

x
值。
然后沿着各个思路,可以写出
print

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语言:在结构体内部定义函数指针

functionpointer就是函数指针,指向一个函数,该函数的原型类似
void function(pStruct_X * p)
P.functionpointer,就等于是调用该函数了。
不过你的代码中,没写初始化,到底这个函数指针是指向哪个函数。

‘陆’ C语言函数怎么传结构体指针

#include<stdio.h>
#include<stdlib.h>

#defineLINE_MAX80

structbody{
chardata[100];//要定义成数组才可以,不然,还要去分配内存
intnum;
};

voidcreate(structbody*bd);//结构体定义后,才能使用结构体类型,所以,移动到定义之后

intmain(intargc,char*argv[]){
intchoose;
structbody*bd;
bd=(structbody*)malloc(sizeof(structbody));
while(1)
{
printf("*******************欢迎来到文章编辑系统******************** ");
printf("1.创建新文本 ");
printf("2.统计文本 ");
printf("5.退出系统 ");
printf("请选择你需要的功能的序号:");
scanf("%d",&choose);
switch(choose)
{
case1:
printf("创建新文本 ");
create(bd);
continue;
case2:
printf("统计文本 ");
continue;
case5:
printf("谢谢您的使用! ");
break;
default:
printf("请正确输入! ");
continue;
}
if(choose==5)
break;
}
return0;
}
voidcreate(structbody*bd)
{
printf("编辑文本,Enter键保存 ");
scanf("%s",bd->data);//结构体指针引用成员用->,同时,格式串应该是%s
printf("您输入的文本是:%s ",bd->data);//同上
}

‘柒’ C语言结构体的函数指针会不会乱指

指针声明就已经确定他可以指向哪一种类型的变量了,比如整形指针……,函数指针只能指向它声明时参数类型返回值类型相同的函数,否则会和用整型指针指向浮点型数据一样不能通过

热点内容
巴法云服务器带宽 发布:2025-01-12 13:15:26 浏览:675
搭建国外服务器需要多少钱 发布:2025-01-12 13:08:01 浏览:826
我的世界mod服务器开荒 发布:2025-01-12 13:07:10 浏览:756
sql优化书 发布:2025-01-12 13:07:09 浏览:454
高校网站服务器搭建与维护论文 发布:2025-01-12 13:06:31 浏览:710
sqlserver实例没有 发布:2025-01-12 12:57:18 浏览:251
代码文件服务器地址怎么写 发布:2025-01-12 12:50:47 浏览:759
java中方法与 发布:2025-01-12 12:50:13 浏览:654
如何快速查找c语言编译时的错 发布:2025-01-12 12:49:56 浏览:31
看门狗上传病毒 发布:2025-01-12 12:32:54 浏览:326