您的位置:首页 > 其它

const,typedef与define

2016-02-23 19:52 253 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: