zoukankan      html  css  js  c++  java
  • c语言的函数指针和函数指针数组的简单demo

    今天,简单记录一下,函数指针和函数指针数组的使用,废话不多说,直接贴上代码,里面有详细的注释,方便以后查阅。

     

     1 #include <cstdio>
     2 #include <Windows.h>
     3 
     4 typedef void(*myFun)(const char*);//这里定义的一个函数类型(返回值为void,参数为const char*),类型名为myFun,使用见第28行
     5 
     6 void(*func)(const char* name); //声明了一个函数指针,指针名为func
     7 
     8 //下面定义的3个函数,就函数名不一样,函数体是一样的,这里只是方便演示,意思一下而已。
     9 void func1(const char* name)
    10 {
    11     printf("this is %s function
    ",name);
    12 }
    13 void func2(const char* name)
    14 {
    15     printf("this is %s function
    ", name);
    16 }
    17 void func3(const char* name)
    18 {
    19     printf("this is %s function
    ", name);
    20 }
    21 
    22 //定义一个函数指针数组(返回值为void,参数为const char*的函数指针(名)都可以放在这数组里)
    23 void(*fun[])(const char* name) =
    24 {
    25     func1,func2,func3
    26 };
    27 
    28 //定义一个选择使用哪个函数的函数,返回值是函数指针
    29 myFun choiceFun(const char* name)  //如果没用第三行的typedef定义,这里应该这样写:void (*choiceFun(const char* name))(const char*){....函数体}
    30 {
    31     if (0 == strcmp(name, "1"))
    32     {
    33         return fun[0];
    34     }
    35     else if (0 == strcmp(name, "2"))
    36     {
    37         return fun[1];
    38     }
    39     else if (0 == strcmp(name, "3"))
    40     {
    41         return fun[2];
    42     }
    43     else
    44     {
    45         printf("未找到相应函数,将返回null指针
    ");
    46         return NULL;
    47     }
    48 }
    49 
    50 
    51 int main()
    52 {
    53     char input_self[127] = {0};//用来接收用户的输入
    54     
    55     while (1)
    56     {
    57         printf("请输入方法几?
    ");
    58         if (scanf("%s", &input_self) != EOF) //按下ctrl+z就代表结束
    59         {
    60             func = choiceFun(input_self); //根据用户的输入来决定返回哪一个函数
    61             if (func != NULL) //确认函数指针有效,才能执行!
    62             {
    63                 func(input_self);
    64             }
    65         }
    66         else
    67         {
    68             printf("您选择了退出,bye!
    ");
    69             break;
    70         }
    71     }
    72     system("pause");
    73     return 0;
    74 }

     

    最后是运行界面:

     

  • 相关阅读:
    [数据备档]源码用的百家姓的数组,实用
    Linq to Sql 与NHibernate数据库操作性能比较研究 测试程序源码
    【技术备档】在WinCE5.0下实现透明背景按钮(.net C#)
    【技术备档】windows平台下快速配置MySQLPython的方法
    反思一下,我为什么需要这些技术?
    一些软件或组件
    Hibernate 与 Spring 多数据源的配置
    asp.net web路径总结
    Ubuntu 中文编码设置
    根据枚举动态扩充datatable列
  • 原文地址:https://www.cnblogs.com/dz-study/p/11651392.html
Copyright © 2011-2022 走看看