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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现大整数乘法(字符串乘法)

    C++实现大整数乘法(字符串乘法)

    这篇文章主要为大家详细介绍了C++实现大整数乘法、字符串乘法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Qt超时锁屏的实现示例

    Qt超时锁屏的实现示例

    本文主要介绍了Qt超时锁屏的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C语言 模拟实现strlen函数详解

    C语言 模拟实现strlen函数详解

    在 C 语言 中我们要获取 字符串 的长度,可以使用strlen 函数,strlen 函数计算字符串的长度时,直到空结束字符,但不包括空结束字符,因为 strlen 函数时不包含最后的结束字符的,因此一般使用 strlen函数计算的字符串的长度会比使用 sizeof 计算的字符串的字节数要小
    2022-04-04
  • C++中栈结构建立与操作详细解析

    C++中栈结构建立与操作详细解析

    我们可以把栈理解成一个大仓库,放在仓库门口(栈顶)的货物会优先被取出,然后再取出里面的货物。而从数据的逻辑结构来看,栈结构起始就是一种线性结构
    2013-10-10
  • C语言switch使用之诡异用法详解

    C语言switch使用之诡异用法详解

    今天小编就为大家分享一篇C语言switch使用之诡异用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C语言 野指针与空指针专篇解读

    C语言 野指针与空指针专篇解读

    全网最接地气的C语言野指针介绍,此处对于野指针与空指针知识点做一些简要的介绍,作者实属初学,写博客也是作者学习的一个过程,难免文章中有内容理解不到位或者有不当之处,还请朋友们不吝指正,希望大家多多给予支持,赠人玫瑰,手有余香
    2021-11-11
  • VSCode远程代码开发及DNS隧道端口转发实现远程办公代码

    VSCode远程代码开发及DNS隧道端口转发实现远程办公代码

    这篇文章主要介绍了VSCode远程代码开发及DNS隧道端口转发实现远程办公,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • C语言栈顺序结构实现代码

    C语言栈顺序结构实现代码

    一个能够自动扩容的顺序结构的栈 ArrStack 实例 (GCC编译),有需要的朋友可以参考一下
    2013-10-10
  • C++中的三大函数和操作符重载(Boolan)

    C++中的三大函数和操作符重载(Boolan)

    本文主要介绍了C++中的三大函数和操作符重载(Boolan)的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 如何让Dev-C++支持auto关键字呢

    如何让Dev-C++支持auto关键字呢

    这篇文章主要介绍了如何让Dev-C++支持auto关键字问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论