#define PINT int*与typedef int *SINT的区别.

来源:互联网 发布:网络信用卡有哪些 编辑:程序博客网 时间:2024/06/06 01:54

#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*)。

      



原创粉丝点击