C/C++中typedef的用法大全

 更新时间:2023年04月25日 10:03:16   作者:Thomas_Lbw  
typedef用法一共七种,分别是:为基本数据类型起别名、为结构体起别名、为指针类型起别名、为数组类型起别名、为枚举类型起别名、为模版函数起别名。本文就来分别讲讲这7个用法的具体实现吧

一、为基本数据类型起别名

typedef int myint;
myint x = 5;

"myint"是"int"的别名,可以使用"myint"来代替"int"声明变量,这个很好理解,但是也很少有人这么用吧。

二、为结构体起别名

这个在学C语言时就知道了:

typedef struct {
    int x;
    int y;
} Point;
 
Point p = { 3, 4 };

三、为指针类型起别名

在这个例子中,"intptr"是指向"int"类型的指针的别名,可以使用"intptr"来声明指针变量。为防止代码阅读者有障碍,慎用吧。

typedef int* intptr;
intptr p = new int;
*p = 5;

四、为函数指针类型起别名

在这个例子中,"func_ptr"是指向函数的指针类型的别名,可以使用"func_ptr"来声明函数指针变量。

typedef int (*func_ptr)(int, int);
int add(int a, int b) { return a + b; }
 
func_ptr f = add;
int result = (*f)(3, 4);

这个在DLL导出用到的比较多,如:

typedef MyInterface* (*CreateMyObjectFunc)(); 

在这个例子中,typedef 声明了一个名为 CreateMyObjectFunc 的新类型。CreateMyObjectFunc 是一个函数指针类型,它指向一个返回值为 MyInterface* 类型的函数,该函数没有参数。

这种函数指针类型的定义通常用于动态加载库文件中的函数。通过这种方式,可以定义一个函数指针类型来代表动态加载的库文件中的函数,并将其作为参数传递给动态加载函数。然后可以使用该函数指针类型调用动态加载函数中的函数。在这种情况下,CreateMyObjectFunc 函数指针类型可以用于动态加载库文件中的一个函数,该函数返回一个 MyInterface 类型的指针。

五、为数组类型起别名

typedef int myarray[10];
myarray arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

六、为枚举类型起别名

typedef enum { red, green, blue } Color;
Color c = green;

七、为模版函数起别名

在这个例子中,"IntStruct"是模板类型"MyStruct"的具体化,可以使用"IntStruct"来声明"MyStruct<int>"类型的变量。

template <typename T>
struct MyStruct {
    T value;
};
 
typedef MyStruct<int> IntStruct;
IntStruct s = { 5 };

到此这篇关于C/C++中typedef的用法大全的文章就介绍到这了,更多相关C++ typedef内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VS Code远程连接Linux服务器调试C程序的操作方法

    VS Code远程连接Linux服务器调试C程序的操作方法

    这篇文章主要介绍了VS Code远程连接Linux服务器调试C程序的操作方法,打开远程 Linux 服务器上的文件夹本文以 /root/ 为例,给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • C++中STL容器的主要使用及含义说明

    C++中STL容器的主要使用及含义说明

    这篇文章主要介绍了C++中STL容器的主要使用及含义说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 简单聊聊C++中线程的原理与实现

    简单聊聊C++中线程的原理与实现

    C++11 引入了多线程支持,提供了一套基本的线程库,包括线程、互斥量(mutex)、条件变量(condition_variable)等。这些组件可以帮助你在 C++ 程序中实现并发和多线程编程,本文就来和大家简单聊聊吧
    2023-03-03
  • 人脸检测中AdaBoost算法详解

    人脸检测中AdaBoost算法详解

    这篇文章主要为大家详细介绍了人脸检测中AdaBoost算法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • vscode+leetcode环境配置方法

    vscode+leetcode环境配置方法

    这篇文章主要介绍了vscode+leetcode环境配置,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • C++实现LeetCode(149.共线点个数)

    C++实现LeetCode(149.共线点个数)

    这篇文章主要介绍了C++实现LeetCode(149.共线点个数),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++利用 _findfirst与_findnext查找文件的方法

    C++利用 _findfirst与_findnext查找文件的方法

    这篇文章主要给大家介绍了关于C++利用 _findfirst与_findnext查找文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • 通过stringstream实现常用的类型转换实例代码

    通过stringstream实现常用的类型转换实例代码

    在本篇文章里小编给大家分享了关于通过stringstream实现常用的类型转换实例代码内容,需要的朋友们可以参考下。
    2020-04-04
  • C++存储持续性生命周期原理解析

    C++存储持续性生命周期原理解析

    这篇文章主要为大家介绍了C++存储持续性生命周期原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • C++版本基于ros将文件夹中的图像转换为bag包

    C++版本基于ros将文件夹中的图像转换为bag包

    这篇文章主要介绍了C++版本基于ros将文件夹中的图像转换为bag包,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01

最新评论