zoukankan      html  css  js  c++  java
  • C语言 函数指针的应用

    简单的介绍下C语言函数指针的用法。

    函数指针的声明:

    char (* FunPtr)(char); 或者char (* FunPtr)(char ch);  (声明类型个形参类型根据实际情况更改)

    例:

     1 #include"stdio.h"
     2 
     3 char myFun(char ch)
     4 {
     5     printf("myFun is called, your char is %c.
    ",ch);
     6     return 'w';
     7 }
     8 
     9 void main()
    10 {
    11     char temp;
    12 
    13     char (* funPtr)(char);    //定义一个函数指针
    14     funPtr=myFun;            //将myFun的地址给funPtr
    15     temp=funPtr('s');        //此时可以认为对funPtr的调用就等同于对myFun的调用
    16 
    17     printf("return value: %c
    ",temp);
    18     printf("size of myFun: %d
    ",sizeof(funPtr));
    19 }
    结果:

    myFun is called, your char is s.
    return value: w
    size of myFun: 4

    也可以将函数的定义放到结构体中,通过结构体成员变量来调用。

    例:

     1 #include"stdio.h"
     2 
     3 typedef struct{
     4     char (* funPtr)(char);    //定义一个函数指针
     5 }myFunStruct_t;
     6 
     7 char myFun(char ch)
     8 {
     9     printf("myFun is called, your char is %c.
    ",ch);
    10     return 'w';
    11 }
    12 
    13 void main()
    14 {
    15     char temp;
    16 
    17     myFunStruct_t myFunStruct;
    18     myFunStruct.funPtr=myFun;        //将myFun的地址给funPtr
    19     temp=myFunStruct.funPtr('s');    //此时可以认为对funPtr的调用就等同于对myFun的调用
    20 
    21     printf("return value: %c
    ",temp);
    22     printf("size of myFunStruct_t: %d
    ",sizeof(myFunStruct_t));
    23 }
    结果:

    myFun is called, your char is s.
    return value: w
    size of myFunStruct_t: 4

    或者来点更高级的,

    例:

     1 #include"stdio.h"
     2 
     3 typedef void (* funInPtr_t)(void);        //函数原型定义
     4 typedef void (* funOutPtr_t)(void);
     5 
     6 typedef struct{
     7     funInPtr_t funInPtr;
     8 }myInStruct_t;
     9 
    10 typedef struct{
    11     funOutPtr_t funOutPtr;
    12     myInStruct_t myInStruct;
    13 }myOutStruct_t;
    14 
    15 void myInFun(void)
    16 {
    17     printf("myInFun
    ");
    18 }
    19 
    20 void myOutFun(void)
    21 {
    22     printf("myOutFun
    ");
    23 }
    24 
    25 void main()
    26 {
    27     myOutStruct_t myOutStruct;
    28     myOutStruct.funOutPtr=myOutFun;
    29     myOutStruct.myInStruct.funInPtr=myInFun;
    30     
    31     myOutStruct.funOutPtr();                    //外层函数
    32     myOutStruct.myInStruct.funInPtr();            //内层函数
    33 
    34     printf("size of myInStruct_t: %d
    ",sizeof(myInStruct_t));
    35     printf("size of myOutStruct_t: %d
    ",sizeof(myOutStruct_t));
    36 }
    结果:

    myOutFun
    myInFun
    size of myInStruct_t: 4
    size of myOutStruct_t: 8

    by:cntsw  版权没有 C 翻版不究

  • 相关阅读:
    python 安装包总结
    python wmi使用
    Jquery
    查看linux操作系统位数
    三元
    git clone 指定分支的内容
    慕课网
    http://amazeui.org 后天框架
    tp between
    git pull
  • 原文地址:https://www.cnblogs.com/cntsw/p/4149298.html
Copyright © 2011-2022 走看看