const 我们都见过,但是今天,我们会从头开始重新再说const的所有用法。
一、const修饰普通变量
当我们定义一个变量时,前面加上const修饰的话,这个变量将不再能被修改,称之为常变量。例如:
int a=10;
a=20;
const int b=10;
int const c=10;
b=20;
在上述代码中,a称之为变量,b称之为常变量。变量修改没有任何问题,但是常变量有“常”属性,不能被修改,所以下面两行是错误的。
另外,常变量必须初始化:
int a;
a=10;
a=20;
const int b;
b=10;
你觉得,我定义一个常变量,然后后面再对他进行赋值能对嘛,答案是:不能!
const可以代替一些宏:
#define MAX_NUMBER 1e8
const long long MAX_NUMBER=1e8;
为什么写起来宏更方便,我们还要用const,我只能告诉你:const更加安全。
const修饰普通变量很常用,也很简单,除了记得必须初始化外,需要注意的点也不多。
二、const修饰指针变量
好嘛!这第二个就开始说const与指针的事了,这简直就是羊了个羊的难度跨越。const修饰指针跟羊了个羊一样,看起来规则就这,但其实玩起来,那需要注意的就多了,用的时候小心点就ok了。
1.常量指针
(常指针)常量指针实质顾名思义就是一个指针,但是我们不能通过指针去修改指向的变量,所以这个指针就是常量指针。来看一下语法:
int a=10;
const int *p=&a;
//或者你也可以这么写
int const *p=&a;
但无论上边哪种写法,我们都可以发现一个问题,const真正修饰的不是变量p,而是*p,*p是什么,不就是p指向的内存的内容嘛,const修饰了,那我们就不能修改了。但p这个指针的指向可以改变,指向别的变量:
int a=10;
int b=20;
const int p=&a;
p=&b;
这么写是没有任何问题的。但同样的,不管p指向哪块儿内存,都不能修改p指向的内容,只能修改p的指向,p也成了常量指针,它的意义就是防止通过指针修改变量。
2.指针常量
指针常量就是一个常量,这个常量表示一个指针,也就是这个常量的数据内容是一个地址信息。什么意思呢?看代码:
int a=10;
int b=2