今天首先学习了const变量定义的方式(两种):
第一种定义方式:const 在类型的前面,例如:
const int var=100;
第二种定义方式:const 在类型的后面,例如:
int const var1=999;
注:这两种定义方式没有什么区别。
1、const变量在定义的时候进行初始化;
2、当一个变量被声明为const变量时,意味着该变量是一个常量,不可被修改;
3、该变量只能做右值,不能做左值;
然后我们学习了,const指针,也叫做常指针。
1、常指针在声明的时候进行初始化;
2、指针不能再指向别的变量,指针的value不了被修改。
3、可以通过指针来修改变量的值。
常指针:例如:int * const pp=NULL;
指向常量的指针:
int x = 123;
const int *pc = &x;
1、指向常量的指针,该指针可以指向别的变量,指针的value可以更改。
2、指向常量的指针、不能赋值给一个普通的指针
接下来我们做了一些练习(如下):
const int x=2,y=3; //定义基本类型的const变量
int z=3; //定义一个非const 变量
const int *pc=&x; //指向常量的指针
int *const cp = &z; //常指针,指针不能再指向别的变量
int *pp = &z; //定义一个非const指针pp 把z的地址给了指针
z=y; // 对 const 变量只能做右值,不能做左值
x = y; // 错 x是const变量,所以x的值不可更改
pc=&z; // 对 指向常量的指针,不能通过指针去修改指针所指向
//的内存空间的值,但是,指针可以指向别的变量。
*pc=10; //错 指向常量的指针,不能通过指针去修改指针所指向
//的内存空间的值
*pc=y; //同上
*pc = 5; //同上
pc=pp; // 对 指向常量的指针可以改变指向的地址
//pc是一个指向常量的指针,pp是一个普通的指针。
//pp是一个普通的指针。用一个普通的指针给一个常量的指针赋值是可以的。
pp = pc; /*对
用一个指向常量的指针,赋值给一个普通的指针,不可以,
如果可以,那么就可以通过普通的指针去修改内存的值
*/
z = 5; //对 变量可以改变值,给一个非const赋值是可以的。
z = x; //对 const只能做右值,用一个const的变量给一个非const变量赋值可以。
*cp = x; //错 通过常指针改变指针所指向变量的值,原则上来讲是可以的,
//如果只想的变量是const的,那么不停编译会有不同的结果。
cp=&x; //错 cp是常指针不能改变指针自身的值。给常指针赋值是错误的。
//两种观点
pp = &x; //原则上是可以的,pp为普通的指针,可以通过这种方式给pp赋值。
//错,通过指针去修改变量的值,而不管该变量是否为const,
//x是const常量,不能被改变。
pp = pc; //错 普通的指针可以改变它指向的地址的值,指向常量的指针不可以改变它指向地址的值
//错指向常量的指针不能赋值给一个普通的指针
pp = cp; //对 cp指向的是一个变量的地址,pp是一个不同的指针,可以把cp的值给pp
//常指针可以赋值给一个普通的指针
const int * const pp = &a; //内存空间和值都不能被改变