• C语言--typedef的使用



     前言

    在C语言中使用结构体时必须加上struct这个关键字,那有没有办法省略这个呢?要想达到这个目的就 需要用到关键字typedef,顾名思义”类型定义”。 typedef 数据类型 新的别名; 它是用来操作数据类型。其主要作用有两个: 1.给一个较长较复杂的类型取一个简单的别名。 2.给类型取一个和问题相关的别名。 这两种情况在生活中都非常常见,例如第1种情况,中华人民共和国简称中国,第2种情况,你的同学非常 的漂亮给她起个外号叫”大美丽”。 第一种情况的使用如下:

    1. int main()
    2. {
    3. typedef unsigned long long int uint64;//给无符号长长整型取别名叫uint64
    4. //取一个别名 u代表无符号 int代表整形 64代表64位
    5. unsigned long long int a = 10; //定义一个无符号长长整型
    6. uint64 b = 20; //定义一个无符号长长整型
    7. return 0;
    8. }

     上面的代码给unsigned long long int数据类型取了一个简单的别名uint64,其中u表示符号,int表示 整数,64表示64位。

    1. typedef unsigned long long int uint64;//给无符号长长整型取别名叫uint64
    2. typedef int* Pint;//给整型指针int * 取别名叫Pint
    3. typedef int Arr[10];//这是什么呢?
    4. typedef int (*Pfun)(int, int);//这是什么呢?
    5. int main()
    6. {
    7. int a = 10;
    8. Pint p = &a;
    9. printf("%d\n", sizeof(Arr));
    10. return 0;
    11. }

     第2行代码给int*类型取了一个别名Pint,在第8行Pint定义的变量就是int*这种数据类型了。 对于比较复杂的类型如3,4行就不容易理解了。那怎么办呢?关键是牢记typedef是用来定义数据类型 的。 对于复杂的类型可以先把typedef去掉,看看是定义一个什么类型的变量,然后加上typedef它就由这种 类型的变量提升为这种数据类型。

     利用typedef定义的新类型使用如下:

    1. typedef int* Pint;//给整型指针int * 取别名叫Pint
    2. typedef int Arr[10];//Arr为整数数组类型
    3. typedef int (*Pfun)(int, int);//Pfun为函数指针类型
    4. int Max(int a, int b)
    5. {
    6. return a > b ? a : b;
    7. }
    8. int main()
    9. {
    10. int a = 10;
    11. Pint p = &a; //p为指针变量
    12. Arr arr = { 1,2,3,4,5,6,7,8,9,10 };//arr为数组
    13. Pfun pf = Max;//pf为函数指针变量
    14. printf("%d\n", pf(10, 20));
    15. return 0;
    16. }

     第13行,Pint为整型指针类型,那么它定义的变量就是整型指针变量。 第15行,Arr为整型数组类型,那么它定义的变量就是整型数组变量。 第17行,Pfun为函数指针类型,那么它定义的变量就是函数指针变量。 typedef的第二种情况: 给类型取一个和问题相关的别名。这种方式最典型的应用是size_t和time_t这 两种类型。size_t应用在计数方面,time_t应用在时间方面。在visual studio2022中这两者的定义如下:

    回到本节提到的问题,如何在使用结构体时省略struct这个关键字呢?可以按照如下方法定义结构体。 例如:

    1. //第一个方式
    2. struct A
    3. {
    4. int a;
    5. char b;
    6. };
    7. typedef struct A A;//给struct A起个别名叫A
    8. //第二种方式
    9. typedef struct B
    10. {
    11. char a;
    12. int b;
    13. }B; //给struct B起个别名叫B
    14. int main()
    15. {
    16. A aa = { 10,'x' }; //直接使用A
    17. B bb = { 'y',20 }; //直接使用B
    18. return 0;

    创作不易, 如果这份博客👍对你有帮助,可以给博主一个免费的点赞以示鼓励。

    欢迎各位帅哥美女点赞👍评论⭐️收藏⭐️,谢谢!!!

    如果有什么疑问或不同的见解,欢迎在评论区留言哦👀。

    祝各位生活愉快⭐️

  • 相关阅读:
    L72.linux命令每日一练 -- 第十章 Linux网络管理命令 -- mail和nslookup
    cpolar内网穿透
    WebSocket快速入门及基本使用
    Educational Codeforces Round 122 (Rated for Div. 2) D. Make Them Equal
    斐波那契数
    MySQL数据库————视图和索引
    java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
    SLAM中去除动态物体的部分方法(主要是视觉SLAM)
    从零在win10上测试whisper、faster-whisper、whisperx在CPU和GPU的各自表现情况
    Django框架FAQ
  • 原文地址:https://blog.csdn.net/m0_75266675/article/details/134278130