zoukankan      html  css  js  c++  java
  • typedef的使用3——使用经过typedef定义的函数构成的函数数组

    #include <stdio.h>
    #include <string.h>//不加还能跑,加上反而跑不了了。。。笑哭
    #pragma warning(disable:4996)//要这句跟上面那个包含放在一起。否则会有一个警告阻止编译。
    
    
    //字符串拷贝函数:
    const char * myStrcat(const char *,const char *);
    
    typedef const char * MYSTRCAT1(const char *,const char *);
    //这里是定义了一个MYSTRCAT1这种类型的对象,本身是一个函数
    
    typedef const char * (*MYSTRCAT2)(const char *, const char *);
    //定义了一个指向这种函数的地址
    
    //回调函数:
    
    const char * myback(const char * (const char *, const char *), const char *, const char *);
    
    const char * myback1(MYSTRCAT1, const char *, const char *);
    
    const char * myback2(MYSTRCAT2, const char *, const char *);
    
    
    
    int main(){
        //char *p = myStrcat("hello", " world");
        //printf(p);
        //free(p);
    
        /*
        char *pf = myStrcat;
        char *p1 = myback(pf, "hello", " world");
        printf(p1);
        free(p1);
        */
    /*
        MYSTRCAT1 *function = &myStrcat;
        char *p2 = myback1(function, "hello", " world");
        printf(p2);
        free(p2);
    */
    
    /*
        MYSTRCAT2 function2 = myStrcat;
        char *p3 = myback2(function2, "hello", " world");
        printf(p3);
        free(p3);
    */
    
    /*
        MYSTRCAT1 * function1[10];
        function1[0] = &myStrcat;
        char *p4 = myback1(function1[0], "hello", " world");
        printf(p4);
        free(p4);
    */
        MYSTRCAT2 function2[3];
        function2[2] = myStrcat;
        char *p5 = myback2(function2[2], "hello", " world");
        printf(p5);
        free(p5);
    
    
    
    
        getchar();
        return 0;
    
    
    
    
    }
    
    const char * myStrcat(const char *str1, const char * str2){
        if (str1 != NULL&&str2 != NULL){
            char *p = malloc(strlen(str1) + strlen(str2) + 1);
            strcpy(p, str1);
            strcat(p, str2);
            return p;
        }
    }
    
    const char * myback(const char * func(const char *, const char *), const char * str1, const char * str2){
        return func(str1, str2);
    }
    const char * myback1(MYSTRCAT1 func, const char *str1, const char *str2){
        return func(str1, str2);
    }
    const char * myback2(MYSTRCAT2 func, const char *str1, const char *str2){
        return func(str1, str2);
    }

    什么时候 用typedef 什么时候 使用 #define?

    typedef是一种高级数据特性,它能使某一类型创建自己的名字

     

    1、#define不同,typedef仅限于数据类型,而不是能是表达式或具体的值

     

    2、typedef是编译器处理的,而不是预编译指令

     

    3、typedef#define更灵活

     

      直接看typedef好像没什么用处,使用BYTE定义一个unsigned char。使用typedef可以增加程序的可移植性。

    应用场合:

     

    1、在程序当中如果是定义一个可读的常量,适合用#define

     

    2、如果定义的是一个具体的数据类型,那么typedef更加适合。

     

    3、如果是定义一个函数指针,那么基本就用typedef.

     

     

  • 相关阅读:
    关于项目管理的几点建议
    网站性能优化之服务端(一)
    HP CQ35 Windows7声卡驱动安装不上问题
    ubuntu双系统启动时卡死解决办法
    第十九周练习题
    第十六周作业练习题
    第十七周练习题
    第十八周练习题
    第十五周练习题
    第十四周练习题
  • 原文地址:https://www.cnblogs.com/letben/p/5243405.html
Copyright © 2011-2022 走看看