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 }

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

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

  • 相关阅读:
    屏幕取色器colorspy
    js监控按键
    修改硬件信息小工具
    C#SendKeys的用法
    错误分析:程序集未标记为可序列化
    C#xml反序列化
    office2010激活工具
    截图软件
    C#画图
    .net中SQL防注入代码
  • 原文地址:https://www.cnblogs.com/rarator/p/6439508.html
Copyright © 2011-2022 走看看