对于const修饰的指针,很多小伙伴们不是很清楚其使用的方法,导致很多时候错误的使用,在这里我将浅显易懂的讲解const对于指针的用法!
首先const修饰的指针类型有以下几种:
1.const int *p
2.int const *p
3.int *const p
4.const int *const p
下来我们具体讨论其使用方法
1.const int *p
这里我们只需要搞清楚const修饰的是什么,就可以得出结论
我们将类型去掉,const … *p,我们可以看到,const其实主要就是修饰 *p的。
这代表p指向的空间中的内容不能通过此指针来进行改变。
int a=100;
int *p= &a;
*p=200; //错误!
2.int const *p
这里我们可以通过上述的方式进行判断,const修饰的内容是什么。经过判断,const修饰的还是*p,所以答案与上述一致。
3.int * const p
这里我们应该学会了判断const如何进行修饰的,所以判断const修饰的是 p。
这时候就不一样了,const指的是修饰p指针的本身,表示指针的值不能进行修改,也就是说,指针的指向不能进行修改(指针不能指向其他位置)。
int a=100;
int*const p;
p = &a; //错误!!修改了指针的指向
注意:如果是const修饰指针变量的本身(int* const p),我们在定义的时候必须对其进行初始化,不然就没有机会了。
4.const int *const p
这个是对上述进行结合使用,既不能通过指针来改变空间中的值,也不能改变此指针的指向。
以上就是const的使用方法,但是我们还要注意的一点是,在c语言中上述代码都可以通过编译,但是在C++中(int const p和const int * const p)这两种不能通过编译。*
因为C++中对于const的限制还是很严格的,对于不能修改其指向的指针毫无意义,所以就会报错。