#include<iostream>
#include"stat.h"
using namespace std;
int variable = 1;
int main()
{
//常量指针测试: a --- left 就是指向常量的指针
const int a = 10; //a是一个常量
int c = 100;
const int * left = &a; // 指针符号 * 离 变量left比较近,故left 是一个指针,
//它指向一个不可变的常量 a,
//它是常量修饰的指针,即不能通过* left 来修改 其指向对象a 值的大小
cout<<"right = "<<right<<" *right = "<<*right<<endl;
cout<<"left = "<<left<<" *left = "<<*left<<endl;
// *left = 9; 不可改变 Read-only variable is not assignable,
//不可通过left指针修改其指向的内容
left = &c;//可以更改left 的指向,如此例即将left指向了新变量c
cout<<"After changed:"<<endl;
cout<<"left = "<<left<<" *left = "<<*left<<endl;
//指针常量测试: b --- right 指向的位置不可变,
//即指向一块固定的变量地址,不能指向别人了
int b = 20;// b 是一个普通变量
int * const right = &b;//right是一个指针常量,是一个常量,故地址不可变,故指向的变量不可变
//right是指针修饰的常量,具有指针的性质,故可以通过 *right 来更改指向对象b的值,
//但其指向的地址被牢牢锁定了
*right = 19;//可以通过right指针来更改指向的变量b
cout<<"After changed: right = "<<right<<" *right = "<<*right<<endl;
int d = 18; //新变量d,无法改变right指针的指向
// right = &d; Cannot assign to variable 'right'
//with const-qualified type 'int *const'
return 0;
}
/*
* 总结:
* 以星号 * 为分界点,若const在 * 号右边,则为指针常量
* 若const在 * 号左边,则为常量指针
*
* int * const p=&a; 这个const修饰的是p,所以p不可以指向别的内存区域; 指针常量
* const int *p = &a; 这个const修饰的是 int *, 常量指针
* 即指向的那个内存区域,故使用该指针是改变不了那个内存区域的内容的,但是那个内存区域本身是可以改变
*
*/