C指针之再论typedef

再论typedef

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

struct student s1;			// struct student是类型;s1是变量
s1.age = 12;
student_t s2;
// 第一个类型名:struct student,第二个类型名是student
typedef struct student
{
	char name[20];
	int age;
}student;

struct student s1;
s1.age = 12;

student s2;
// 我们一次定义了2个类型:
// 第一个是结构体类型,有2个名字:struct teacher,teacher
// 第二个是结构体指针类型,有2个名字:struct teacher *, pTeacher
typedef 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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值