一、#define
1、#define 是宏定义,它只是无意义的字符替代;
2、#define 这个在.c到.i文件时,就会被处理,也就是在预处理的时候就会进行字符替换
3、比如:定义数组的大小
#define size 10
只要出现了size就用10 替换
二、typedef
1、typedef则是类型定义,它代表的是这种类型;
2、减少错误
有时候直接定义可能会达不到我们想要的效果,从而引起了错误
1、char* a, b; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针
和一个字符变量;
2、typedef char* P;
P a, b;
3、方便
在c中,我们会用到结构体这个关键字,在定义结构体的时候,我们老是需要带上结构体这个关键字,其实有点麻烦,我们可以利用typedef省事。
typedef struct A
{
char a;
int * b;
}A,*P
A aa;//代表定义了一个A类型的结构体aa;
P pp;//代表定义了一个指向struct A 的指针
4、更加好理解
理解这个的关键在于,括号优先级最高,我们可以遵循从右往左的的阅读顺序,也就是有括号先跳到括号,括号出来之后先看右边,再看左边的原则
(1) int (*func)(int *p);
(1) int (*func)(int *p);
首先,先看第一个括号(*fun)它是一个指针看,再看它的右边,又是一个括号,表示fun是一个函数指针,这个函数的参数是int *,返回值是int;
(2) int (*func[5])(int *);
首先,fun是一个数组,因为[]的优先级比*要高一些,然后数组里的元素是指针,然后指针指向的是一个函数看,函数的参数是int*,返回值是int类型;
三、两者区别示例:#define