指针有两个属性,一个是它指向的地方,一个是它指向地方上的内容。
1.const int/int const
//const int i; //常量 变量"i"需要初始值设定项
const int m = 3;
//m = 5; //表达式必须是可修改的左值
//int const j; //常量 变量"j"需要初始值设定项
int const n = 2;
//n = 7; //表达式必须是可修改的左值
总结:const int/int const必须初始化,且值不允许改变。
2.int const*/const int*(char const*/const char*)
char const *d;
char const *h = "money";
//h[2] = 4; //表达式必须是可修改的左值
h = "monkey";
cout << h << endl;
const char *t;
const char *q = "aoao is the best!";
//q[2] = 6;//表达式必须是可修改的左值
q = "no doubt!";
cout << q << endl;
结果:
总结:const char * 可以不初始化,指针指向的地方可以改变,但是该指针指向地方上的内容不可改变(个人理解:x为指针,const修饰 * x,所以 * x不可以改变,即指向地方的内容不可以改变)。
3.int *const
//int *const p; //常量 变量"p"需要初始值设定项
int *const p = &a;
cout << *p << endl;
//p = &b; //表达式必须是可修改的左值
*p = 5;
cout << *p << endl;
结果:
总结:int *const与第2部分相反–必须初始化,指针指向的地方不可以改变,但是该指针指向地方上的内容可改变(个人理解:x为指针,const修饰x,即指针指向的地方不可以改变)。
4.const int &
“&”含义:引用(别名)
int &b = a; //b为a的别名,改变b值,a值随之改变(可以理解为同一个物体,只是叫法不一样,a为大名,b为小名)
例子如下:
int a=3;
cout << "原来a为:" << a << endl;
int &b = a;
b = 20;
cout << "现在a为:" << a << endl;
结果:
因为为一个物体,所以b的值改变,a的值也改变。