#define PINT int* #define是预处理指令,简单的宏定义,在编译预处理时进行简单的替换,不作正确性检查,不管含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。
①#define PINT int*是,在预处理阶段就已经将PINT替换为int*了,它与int *不等价
②如果有PINT a,b; //实际就是 int* a,b; a是int型指针b是int型数据
③如果有const PINT p ;//const PINT p就是 const int * p 锁的是指针p所指的对象。p可更改,但是p指向的内容不可更改。
#typedef int*SINT typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是在函数定义中不能使用typedef指定符。
①这里typedef int * SINT ;和#define PINT int *的效果一样,只是前者是“起别名”,后者是“字符串替换”
②如果有SINT a,b;//实际上a, b 都为指向int的指针,只是typedef为int* 引入了一个新的助记符
③如果有const SINT p ;//SINT是一种指针类型 ,const SINT p 就是把指针给锁住了 p不可更改,但p指向的内容可更改。
总③:如果 有
const int * a;
const PINT a; <==> const int * b;
const SINT a; <==> const SINT c;
对于#define宏定义,其const修饰的就是指针指向的数值(*b),与cosnt int * a;是一样的(修饰*a)。而typedef其const修饰的是指针,因为SINT被看做是一个整体,而不是int与*两部分。所以cosnt修饰的是c,而不是*c,因为在const SINT c 这条语句中,就不存在* 这个字符。
例:
typedef int *SINT
void main()
{
int *a1,*b1,*c1;
int *a2,b2,c2;
SINT a3,b3,c3;
}
//int*中的*只修饰a2,而b2,c2只是一个int型变量,而SINT作为一个整体,其修饰的是a3,b3,c3三个变量,即三个变量类型都是SINT(即int*)。