C指针之再论typedef
发布日期:2021-05-07 15:11:53 浏览次数:16 分类:精选文章

本文共 1472 字,大约阅读时间需要 4 分钟。

再论typedef

  • C语言的2种类型:内建类型与用户自定义类型
    • 内建类型ADT、自定义类型UDT
  • typedef定义(或者叫重命名)类型而不是变量
    • 类型是一个数据模板,变量是一个实在的数据。类型是不占内存的,而变量是占内存的。
    • 面向对象的语言中:类型就是类class,变量就是对象。
  • typedef与#define宏的区别
    • typedef char *pChar;
    • #define pChar char *
  • typedef与结构体
    • 结构体在使用时都是先定义结构体类型,再用结构体类型去定义变量。
    • C语言语法规定,结构体类型使用时必须是struct 结构体类型名 结构体变量名;这样的方式来定义变量。
// 定义了一个结构体类型,这个类型有2个名字:第一个名字是struct student,第二个类型名叫student_ttypedef struct student{	char name[20];	int age;}student_t;struct student s1;			// struct student是类型;s1是变量s1.age = 12;student_t s2;
// 第一个类型名:struct student,第二个类型名是studenttypedef struct student{	char name[20];	int age;}student;struct student s1;s1.age = 12;student s2;
// 我们一次定义了2个类型:// 第一个是结构体类型,有2个名字:struct teacher,teacher// 第二个是结构体指针类型,有2个名字:struct teacher *, pTeachertypedef struct teacher{	char name[20];	int age;	int mager;}teacher, *pTeacher;
  • 使用typedef一次定义2个类型,分别是结构体变量类型,和结构体变量指针类型。

typedef与const

  • typedef int *PINT;  
    •  const   PINT   p2;    相当于是int *const p2;
    • const int *p和int *const p是不同的。前者是p指向的变量是const,后者是p本身const
  • typedef int *PINT;    
    • PINT    const   p2;     相当于是int *const p2;
  • 如果确实想得到const int *p;这种效果,
    • 只能typedef   const int *  CPINT;     CPINT p1;

使用typedef的重要意义(2个:简化类型、创造平台无关类型)

  • 简化类型的描述。
    • char *(*)(char *, char *);        
    • typedef char *(*pFunc)(char *, char *);    
  • 很多编程体系下,人们倾向于不使用int、double等C语言内建类型,因为这些类型本身和平台是相关的(譬如int在16位机器上是16位的,在32位机器上就是32位的)。
    • 为了解决这个问题,很多程序使用自定义的中间类型来做缓冲。譬如linux内核中大量使用了这种技术.
  • 内核中先定义:
    • typedef int size_t;
    • 然后在特定的编码需要下用size_t来替代int(譬如可能还有typedef int len_t)
  • STM32的库中全部使用了自定义类型
    • 譬如typedef volatile unsigned int vu32;
上一篇:C指针之二重指针
下一篇:C指针之函数应用案例(内核分层架构思想)

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月17日 03时14分59秒