int main()
{
int a = 10, b = 20;
//变量名的解释方向都是从右向左,const在这里修饰的是指向的概念
const int* p1 = &a;//指向不能改变,p1的指向的地址不能改变,p1自身的值可以改变
int const* p2 = &a;//p2是const指针所知指之物不能改变,是整形指针
//当const在“*”左边时,const修饰的是指向能力。当const修饰指向能力时指向只可取值不可写值,而p1自身是可以发生改变
*p1 = 200;//不能通过
p1 = &b;
}
代码总结:当const在“*”左边时,const修饰的是指向能力。当const修饰指向能力时指向只可取值不可写值,而p1自身是可以发生改变。
const int* p1 它的指向为常性
int main()
{
int a = 10, b = 20;
int* const p3 = &a;
*p3 = 200;//当const在“*”右边时,变量本身是常性,但所指之物的值可以改变
p3 = &b;//不能通过
}
代码总结:当const在“*”右边时,变量本身是常性,但所指之物的值可以改变
* const p3为常性指针
int main()
{
int a = 10, b = 20;
const int* const p4 = &a;
*p4 = 200;//以下两行都不能通过,因为const修饰了,p这个指针变量和p指针指向的地址里的数据
p4 = &b;
}
都锁死了指针的两个值都不能发生改变
小贴士:
(1) p是一个指针变量的名字,表示此指针变量指向的内存地址。
(2)*p是指p指针指向的地址里的数据。
(3)&p是取p得地址(p本身就是一个地址,但同时也是一个变量。我认为可以这么理解,p是一个变量,他有自己的内存地址,同时p这个变量存储的也是一个地址)