zoukankan      html  css  js  c++  java
  • C的typedef

    typedef 函数指针的用法

    • typedef 可以简化代码,促进跨平台开发的目的

    • typedef 的行为有点儿像#define宏,用其实际类型替代同义字;不同的是,typedef 在编译时被解释,因此让编译器来应付超越预处理能力的文本替换

    • 函数指针
      typedef int (*PTR_FUNC)(int v1, int v2);
      此用法一般用在给函数定义别名的时候;上面的例子定义PTR_FUNC是一个函数指针,函数类型是带两个int类型的参数,返回一个int类型的数据;
      分析此形式的用法时可以使用下面的方法:
      先去掉typedef和PTR_FUNC,剩下的就是原变量的类型—— int(*)(int, int)

    • 变量类型别名

           typedef struct {
               int a;
               int b;
           } ExType_t;
    

    这里把一个未命名结构体直接取了一个叫ExType_t的别名,这样在定义此结构的实例时就可以这样:
    ExType_t MyTypeObj;
    typedef 取别名的格式为:typedef 变量类型 类型别名

    简单的函数指针用法

    int (*ptrAddFunc)(int a, int b);
    typedef int (*PTR_ADD_FUNC)(int a, int b);

    • 第一个语句定义了一个名为ptrAddFunc变量,这个变量的数据类型为指向拥有二个int类型的参数,返回值为int类型的函数。
    • 第二条语句只是将ptrAddFunc变量的数据类型取了一个别名——PTR_TEMP_FUNC
    • 分别使用这上面两种方法定义变量:
        // 文件名:temp.c
        #include <stdio.h>
    
        typedef int (*PTR_FUNC)(int, int);
    
        int Add(int a, int b) { return (a + b);}
        
        int main(void) {
                int (*ptrAdd1)(int a, int b); // 定义一个名为ptrAdd1的变量
                PTR_FUNC ptrAdd2;       // 定义一个名为ptrAdd2的变量
                
                ptrAdd1 = Add;
                ptrAdd2 = Add;
    
                printf("%d
    ", ptrAdd1(10, 20));
                printf("%d
    ", ptrAdd2(1, 2));
    
                return 0;
        }
    

    如果你安装有gcc,则可在命令行终端下,直接使用下面命令即可查看结果:

    • gcc -o temp.exe temp.c
    • ./temp.exe
  • 相关阅读:
    善用VS中的Code Snippet来提高开发效率
    c#获取远程文件更新时间
    图解VS2008单元测试及查看代码覆盖率
    常用关于 JavaScript 中的跨域访问方法
    Jquery中使用setInterval和setTimeout
    外链图片也有风险吗?
    设计模式学习总结抽象工厂模式(Abstract Factory Pattern)
    斐波拉杰博弈 取石子(五)
    后缀表达式 NYOJ 257
    杭电 1085 Holding BinLaden Captive!
  • 原文地址:https://www.cnblogs.com/freerqy/p/10847867.html
Copyright © 2011-2022 走看看