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\n", ptrAdd1(10, 20));
            printf("%d\n", ptrAdd2(1, 2));

            return 0;
    }

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

  • gcc -o temp.exe temp.c
  • ./temp.exe
posted @ 2019-05-11 11:17  不懂我在写什么  阅读(751)  评论(0编辑  收藏  举报