zoukankan      html  css  js  c++  java
  • 函数指针数组指针+结构体数组

    /*****************
    结构体数组
    计算一个班学生四门课程平均分
    ************************/
    
    #include <stdio.h>
    #include <string.h>
    
    char *fun1(char *p)
    
    {
    
    printf("%s
    ",p);
    
    return p;
    
    }
    
    char *fun2(char *p)
    
    {
    
    printf("%s
    ",p);
    
    return p;
    
    }
    
    char *fun3(char *p)
    
    {
    
    printf("%s
    ",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
    ");
    }
    
    
    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
    ",pf[0][0]);
    printf("pf[0][1] = %p
    ",pf[0][1]);
    printf("pf[0][2] = %p
    ",pf[0][2]);
    
    printf("pf[0] = %p
    ",pf[0]);
    printf("pf[1] = %p
    ",pf[1]);
    
    printf("a[1] = %p
    ",a[1]);
    printf("a[0] = %p
    ",a[0]);
    printf("&a[0] = %p
    ",&a[0]);
    printf("a[2] = %p
    ",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
    ",
    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;
    }
    

      输出:

    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.
    

      

  • 相关阅读:
    [HNOI2004]宠物收养所 题解
    文艺平衡树(区间翻转)(Splay模板)
    搜索专题 题解
    Gorgeous Sequence 题解 (小清新线段树)
    花神游历各国 题解(小清新线段树/树状数组+并查集)
    [HNOI2012]永无乡 题解
    poj 3683 2-sat问题,输出任意一组可行解
    hdu 1824 2-sat问题(判断)
    hdu 4115 石头剪子布(2-sat问题)
    hdu 4421 和poj3678类似二级制操作(2-sat问题)
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/9466570.html
Copyright © 2011-2022 走看看