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
  • 相关阅读:
    use other gpio pins as i2c
    systemd详解详解
    Python ctype sizeof incorrect!
    libvirt 安装篇
    Django Restful Framework (二): ModelSerializer
    Django Restful Framework (一): Serializer
    libvirt 网络手册(二):桥接网络
    KVM 虚拟机联网方式:NAT 和 Bridge
    libvirt 网络手册(一)
    CentOS 7 环境配置
  • 原文地址:https://www.cnblogs.com/freerqy/p/10847867.html
Copyright © 2011-2022 走看看