那为什么该指针还可以指向一个变量?
比如:
const int *p=0xff;
int a=3;
p=&a;
这个指针p的指向地址还是改了,难道我理解错了?
请高手和版主老大们帮帮忙,给个解释,谢谢.
以前我似乎发过关于const用法的文章,但后来我修改了那文章中一些部分,因为那些部分理解有误。我贴上相关内容给你吧
===============================================================
int a[] = {1, 2, 3, 4, 5};
——const int *p = a; //p是指向常量的指针,const修饰的是int *p.因此,不可以通过给指针 //赋值来改变数组中的数据,但指针可以移动.例如:
// *p = 10; /*错误*/
// *(p + 2) = 1; /*错误*/
//可以这样理解:P就死也要指向a,所以它不可以改变它其中任何一个
//元素的值。但是a就不一样了,它是自由的,它想怎么改变值就怎么
//改变。
——int * const p = a; //看这表达式,const的位置和第一个不同吧!他们的用法和作用 //就完全不一样了。这时候p是指针常量,我们知道,指针是指向向 //了一个数组的首地址,那么,它的位置就不可以改变了。了。 //因此,指针P不能移动.但是它指向数组第一个数据,所以它可以而且只 //可以改变数组第一个数据的值。这一点请别误解,指针常量只是它的地
//址不可以改变,并不是它指向的内容一定不可以改变,这一点切记!
//好啦。假如你又不理解,偶有一个比较形象的例子来说明:
//假如有一个固定的人拉着另外一个人的手,注意,固定的人相当 //于他是不可以由其他人来替换的。但是他可以拉其他人的手, //并不一定规定他必须拉同一个人的手啊。现在你应该可以有个比 //较深的印象和理解吧:P
//下面举几个例子帮助理解:
// *p = 2; /*可以*/
// *(p+1) = 10; /*可以*/
// p++; /*不可以*/
——const int * const p = a; //假如前面两种表达式的本质你理解了,这种表达式你来理解根本
//没有问题,const现在有两个,而且一个const的位置是第一种情 //况的位置,第二个const是第二种情况的位置,所以这表达式的功 //能就是前两种情况的作用总合。这里不多说!
//下面举几个例子帮助理解:
// *p = 2; /*不可以*/
// *(p + 2) = 10; /*不可以*/
// p++; /*不可以*/