const,typedef与define

来源:互联网 发布:mysql update 阻塞 编辑:程序博客网 时间:2024/05/18 00:51

const 指针:

int const *p;//  p指向一个int类型,可以改变p得指向位置,但不能改变p指向位置的值。

int * const p;//      p指向一个int类型,不能改变p指向的位置,但可以改变p指向位置的值。

通过判断const在*得位置来判断p是常量指针还是指向位置的值不能改变。

前者const修饰的是指针指向的位置*p

后者const修饰的是指针p


我们知道,define和typedef两者有明显区别。

define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错

typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition

虽然知道二者的区别,但是实际使用过程中还是容易犯错

比如

typedef int INT;

#define int INT;

都是INT表示int


但是当修饰指针的时候

1.#define TYPE* pint  //pint也为指向一个TYPE的指针

2.typedef TYPE*  pint;       // pint 为指向一个TYPE 的指针

pint都是表示 TYPE*的意思


  接下来:

1. const pint p;

替换过后:const TYPE* p;

声明了一个指针p,该指针指向TYPE类型,const修饰的是*p

2.const pint p;

声明了一个指针p,该指针指向TYPE类型,const修饰的是p 


typedef int* pint;typedef const int* cpint;int main(){int a = 10;int b = 5;pint p1 = &a;const pint p2 = &a;cpint p3 = &a;const cpint p4 = &a;*p1 = 6;//正确 p1 --int* p1   *p2 = 6;//正确 p2 --int * const p2 是一个常指针,指向a,可以改变a的值*p3 = 6;//错误 p3 --int const *p3*p4 = 6;    <span style="white-space:pre"></span>//错误 p4 --const int* const p4 既不能改变p4指向的位置,也不能改变指向位置的值p1 = &b;//正确 p2 = &b;//错误p3 = &b;//正确p4 = &b;//错误return 0;}







0 0
原创粉丝点击