最近在复习C语言,就来说说关于我以前才开始学C语言很迷糊的一个知识点:const关键字
const关键字是用来定义只读变量的,说 const 定义的是变量,但又相当于常量;说它定义的是常量,但又有变量的属性,所以可以叫常变量。用 const 定义常变量的方法很简单,就是在定义变量时前面加 const 即可,如下:
const int a=2;//语句1
int const b=5;//语句2
以上代码中,语句1就等于语句 2,没有差别。用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值。
在代码里,局部变量是存储在栈中的,静态变量是存储在静态存储区中,而经过 const 修饰过的变量存储在内存中的“只读数据段”中。只读数据段中存放着常量和只读变量等不可修改的量。
关于const修饰指针的时候,看下面这段代码:
int n1=2,n2=5,n3=8;
const int *p1=&n1;//语句3
p1++;//可以
n1=20;//可以
(*p1)=20;//不可以
int const *p2=&n2;//语句4
p2++;//可以
n2=20;//可以
(*p2)=20;//不可以
int *const p3=&n3;//语句5
p3++;//不可以
n3=20;//可以
(*p3)=20;//可以
其实语句3和语句4是一样的,因为这两个里面const修饰的是同一个。关于const遇见指针,你就记住:const修饰的是什么就看const的右边是什么。语句3和语句4里面,const修饰的都是*p(代码里面就是(*p1)和(*p2)),即你不可以通过指针去改变指针指向的那个变量,但是那个变量本身不是const修饰的,变量本身是可变的,所以语句3中n1=20是合法的,但是(*p1)=20是非法的。语句5里面const修饰的是p3这个指针,即你不可以改变这个指针的指向,但是这个指针指向的变量是可以被改变的,所以p3++是非法的,而n3=20是可以的。
欢迎交流:)