前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >函数指针数组指针+结构体数组

函数指针数组指针+结构体数组

作者头像
用户4645519
发布2020-09-07 11:01:42
8540
发布2020-09-07 11:01:42
举报
文章被收录于专栏:嵌入式学习
代码语言:javascript
复制
/*****************
结构体数组
计算一个班学生四门课程平均分
************************/

#include <stdio.h>
#include <string.h>

char *fun1(char  *p)

{

    printf("%s\n",p);

    return  p;

}

char *fun2(char  *p)

{

    printf("%s\n",p);

    return  p;

}

char *fun3(char  *p)

{

    printf("%s\n",p);

    return  p;

}

typedef struct date
{
    int year;
    int month;
    int day;
}DATE;

typedef struct student
{
    long studentID;
    char studentName[10];
    char studentSex;
    DATE birthday;
    int score[4];
}STUDENT;

void function()
{
    printf("call function\n");
}


int main()
{
    int i,j,sum[30];
    void(*p)();
    *(int*)&p = (int) 0x401330;
	p = function;
    (*p)();

    char* (*a[3])(char  *p);

    char* (*(*pf)[3])(char  *p);

    pf  = &a;

    a[0]= fun1;

    a[1] =fun2;

    a[2]= fun3;

    a[2]("func33");
    a[1]("func22");

    ( *(char*(*)(char *)) 0x00401350)("func1111");
    ( *(char*(*)(char *)) 0x00401366)("func2222");
    ( *(char*(*)(char *)) 0x0040137c)("func3333");

    printf("pf[0][0] = %p\n",pf[0][0]);
    printf("pf[0][1] = %p\n",pf[0][1]);
    printf("pf[0][2] = %p\n",pf[0][2]);

    printf("pf[0] = %p\n",pf[0]);
    printf("pf[1] = %p\n",pf[1]);

    printf("a[1] = %p\n",a[1]);
    printf("a[0] = %p\n",a[0]);
    printf("&a[0] = %p\n",&a[0]);
    printf("a[2] = %p\n",a[2]);

    pf[0][0]("fun1");
    pf[0][1]("fun2");
    pf[0][2]("fun3");

    (*(*pf+1))("fun1");

    STUDENT stu[5] =
    {
        {1001,"张三",'M',{1994,6,19},{72,32,89,41}},
        {1002,"赵六",'F',{1998,6,19},{72,56,78,41}},
        {1003,"王五",'M',{2004,6,19},{96,52,89,41}},
        {1004,"李四",'F',{1689,6,19},{56,56,65,41}}
    };

    for(i=0;i<4;i++)
    {
        sum[i] = 0;
        for(j=0;j<4;j++)
        {
            sum[i] = sum[i] + stu[i].score[j];
        }
        printf("%10ld %8s %3c %6d/%02d/%02d %4d %4d %4d %4d %6.1f\n",
        stu[i].studentID,
        stu[i].studentName,
        stu[i].studentSex,
        stu[i].birthday.year,
        stu[i].birthday.month,
        stu[i].birthday.day,
        stu[i].score[0],
        stu[i].score[1],
        stu[i].score[2],
        stu[i].score[3],
        sum[i]/4.0);
    }
    return 0;
}

运行结果如下:

代码语言:javascript
复制
call function
func33
func22
func1111
func2222
func3333
pf[0][0] = 00401350
pf[0][1] = 00401366
pf[0][2] = 0040137C
pf[0] = 0028FE7C
pf[1] = 0028FE88
a[1] = 00401366
a[0] = 00401350
&a[0] = 0028FE7C
a[2] = 0040137C
fun1
fun2
fun3
fun1
      1001     张三   M   1994/06/19   72   32   89   41   58.5
      1002     赵六   F   1998/06/19   72   56   78   41   61.8
      1003     王五   M   2004/06/19   96   52   89   41   69.5
      1004     李四   F   1689/06/19   56   56   65   41   54.5

Process returned 0 (0x0)   execution time : 0.015 s
Press any key to continue.
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/08/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档