zoukankan      html  css  js  c++  java
  • [windows c]关于指针函数和参数可变函数同时应用情况的疑问

    2017/03/10 更新

    后来思考了一下,其实这基本就是C#里委托的一种用法。

    才疏学浅,知道的太少才会出现下面这篇博文,我也不想删掉,放在这里作为自己的一个警示。

     ------------------------------------------------------------------------------------------------------------------------------------

    昨天和今天在工作里写代码的时候,想把一段遍历的代码共用,但是苦于里面要做的处理过程和变量数目都有相当大的区别。

    所以想用标题上的方法来解决这个问题,代码如下:

     1 #include <stdio.h>
     2 #include <stdarg.h>
     3 
     4 typedef int(*FunType)(int, int, ...);
     5 int test(FunType ft, int num, ...);
     6 int inner_fun_1(int a, int b);
     7 int inner_fun_2(int a, int b, int c);
     8 
     9 int main()
    10 {
    11     //这两个函数简单起见就做了个加法,可以完全不同的处理过程
    12     test(inner_fun_1, 1, 2);
    13     test(inner_fun_2, 1, 2, 3);
    14 }
    15 
    16 int inner_fun_1(int a, int b)
    17 {
    18     return a + b;
    19 }
    20 
    21 int inner_fun_2(int a, int b, int c)
    22 {
    23     return a + b + c;
    24 }
    25 
    26 int test(FunType ft, int num, ...)
    27 {
    28     va_list argp;
    29     int i;
    30     int para;
    31     int para_arr[2];
    32 
    33     va_start(argp, num);
    34 
    35     for (i = 0; i < 2; i++) {
    36         para = va_arg(argp, int);
    37         if (para == NULL) {
    38             break;
    39         }
    40         para_arr[i] = para;
    41         printf("additional arg[%d]: %d
    ", i, para);
    42     }
    43     va_end(argp);
    44 
    45     if (i == 1) {
    46         printf("res_1: %d
    ", ft(num, para_arr[0]));
    47     } else {
    48         printf("res_2: %d
    ", ft(num, para_arr[0], para_arr[1]));
    49     }
    50 }

    上面是一个比较简单的例子。

    做成这样不知道是我一开始思路有错,抑或有更加优秀的办法。

  • 相关阅读:
    eclipse本地覆盖版本库
    数据库表分区
    oracle监听器启动,实例启动
    Mac 终端命令大全
    Mac基本用法
    wen前端学习计划
    css3animation模仿百度音乐的唱片旋转效果
    获取HTML DOM节点元素的方法的总结
    简单CSS技巧实现的Logo动画效果(很像导航栏上经常运用的效果,但有差别)
    详解 CSS 属性
  • 原文地址:https://www.cnblogs.com/rarator/p/6439508.html
Copyright © 2011-2022 走看看