再论typedef


1、C语言中的2种类型:内建类型和用户自定义类型
(1)内建类型:ADT、自定义类型:UDT
2、typedef定义(或者叫重命名)类型而不是变量
(1)类型是一个数据模板,变量是一个实在的数据。类型是不占内存的,而变量是占内存的。
(2)面向对象的语言中:类型就是类class,变量就是对象。
3、typedef与#define的区别
typedef char *pChar;
#define pChar char *
4、结构体定义的方法
第一种:struct student
  {
   char name[20];
   int age;
  };
 使用的时候:
     struct student s1;   //struct student是类型;s1是变量
  s1.age = 20;
第二种:struct student
  {
   char name[20];
   int age;
  }student_t;
 使用的时候:
     student_t s1;
  s1.age = 20;
 或者是定义结构体指针:
     struct student *pS1;    //结构体指针
  student_t *pS1;    //结构体指针
第三种:typedef struct student
  {
   char name[20];
   int age;
  }student, *pStudent;
 一次定义了两个类型:
  第一个是结构体类型:有两个名字:struct student,student;
  第二个是结构体指针类型:有两个名字:struct student *,pStudent;
5、typedef与结构体
(1)结构体在使用时都是先定义结构体类型,再用结构体类型去定义变量。
(2)C语言语法规定:结构体类型使用时必须是struct 结构体类型名 结构体变量名;这样的方式来定义变量。
(3)使用typedef一次定义两个类型,分别是结构体变量类型,和结构体变量指针类型。
6、typedef与const
(1)typedef int *PINT;  const PINT p2;  相当于int *const p2;//*p2是可以修改的,但是p2改不了
(2)typedef int *PINT;  PINT const p2;  相当于int *const p2;
(3)如果想得到const int *p;这种效果,只能是typedef const int *CPINT;CPINT p1;
7、使用typedef的意义
(1)简化类型的描述
char *(*)(char *, char *);     typedef char *(*pFunc)(char *, char *);
(2)很多编程体系下,人们倾向于不使用int、double等C语言内建类型,因为这些类型本身和平台是相关的(譬如int类
型在16位机器上时16位的,在32位机器上就是32位的)。为了解决这个问题,很多程序使用自定义的中间类型来做缓冲。
譬如Linux内核中使用了这种技术,内核中先定义:typedef int size_t;然后在特定的编码需要下用size_t来替代int。
(3)STM32的库中全部使用了自定义类型,譬如typedef volatile unsigned int vu32;  
 

原文地址:https://www.cnblogs.com/jiangtongxue/p/11387850.html