const 修饰指针有三种情况
1.const 修饰指针 —— 常量指针
2.const 修饰常量 —— 指针常量
3.Const 即修饰指针又修饰常量
用代码举例子如下:
int a = 10 ;
int b = 20 ;
//1.const 修饰指针 称为常量指针
int const *p1 = &a ;//指针p1指向a,保存a的地址
p1 = &b ;//正确 常量指针p1的指向可以更改 更改后指向了b
*p1 = 80 ;//错误 常量指针p1的值不可以更改(这样写在VS2012直接报错)
cout << "*p1 = "<<*p1<<endl;
cout <<"P1储存的地址 = " <<p1 << endl;//输出p1指针储存的地址
cout <<"a的地址 = "<< &a <<endl;//输出a的地址
/*运行结果为
*p1 = 20
P1储存的地址 = 00FDFC5C
a的地址 = 00FDFC68
*/
//2.const 修饰常量 称为指针常量
int * const p2 = &a ; //指针p2指向a,保存a的地址
p2 = &b ;//错误 指针常量p2的指向不可以被更改(这样写在VS2012中直接报错)
*p2 = 100 ;//正确 指针常量p2指向的地址中所包含的值可以被更改
cout << "*p2 = "<<*p2<<endl;
cout <<"P2储存的地址 = " <<p2 << endl;//输出p2指针储存的地址
cout <<"a的地址 = "<< &a <<endl;//输出b的地址
cout <<"b的地址 = "<< &b <<endl;//输出b的地址
/*
*p2 = 100
P2储存的地址 = 00A3FA28
a的地址 = 00A3FA28
b的地址 = 00A3FA1C
*/
//3.const 即修饰指针又修饰常量
const int * const p = &a ;
//指针指向a,并且指针的指向不可以更改,指向的地址所包含的值也不可以更改
*p = 30 ;//错误 指针的指向不可以更改(这样写在VS2012中直接报错)
p = &b ; //错误 指向的地址所包含的值不可以更改(这样写在VS2012中直接报错)
//语法报错,指向和值都不能修改