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;
|