const和指针
指针指向一个常量对象
将指针指向常量对象,这样可以防止使用指针来修改所指向的值
int num = 6;
const int *p = #
//*p = 8 非法,不能改变指向常量对象的值
但是,对象num本身不是常量可以被修改
num = 8 //合法的
也就是说,它指向的那个值并不是常量,因此我们不能通过p来修改它指向的值但是可以修改num的值从而修改p指向的值
将指针本身申明为常量
int t1 =1;
int t2 =2;
const int *p1 = &t1;
int *const p2 = &t2;
//p2 = &t1 非法,p2是常量指针,无法改变其指向的地址,只能指向t1
第一个申明就是前面所说的不能修改p1来改变p1所指向地址里的值,但可以修改原来变量的值从而达到修改p1所指向地址里的值;第二个申明p2本身被申明为一个常量,也就是它指向的地址不能被改变,但是可以修改它所指向地址里值
int t1 = 1;
int t2 = 2;
const int *p1 = &t1;
//*p1+=1; 非法
cout << *p1 << endl;
t1++;
cout << *p1 << endl;
int *const p2 = &t2;
cout << *p2 << endl;
*p2 += 1;
//p2 = &t1; 非法
cout << *p2 << endl;
一开始p1指向t1,p2指向t2,p1输出t1的值1,改变t1的值为2,再次输出p1,仍然输出t1的值2 ,也就是说p1地址存放的值被t1更改了;p2一开始输出t2的值2,p2修改其地址存放的值为3,再次输出p2得到修改后的值为3,也就是说,p2不能改变其指向但是他指向的值是可以通过自身修改的