C语言中的变量与常量,顾名思义,可变与恒定。
const的存在就是将变量修饰为常量,即让变量变为只读属性。(并不是真的变为常量)
只读的变量:
使变量属性变为只读,像常量一样无法通过赋值进行更改。
定义方式:
const int cnum = 1024;
那么,cnum就是类似常量的只读变量,我们就无法再使用赋值语句对它保存的数据进行更改。
指向常量的指针:
指针本身可以更改指向,但是所指向的变量的数据不可通过解引用的方式更改。
定义方式:
const int *pc = &cnum;
const int 为指向整形常量的指针,它可以改变指针pc的存储(就是指针的指向),不可通过解引用改变指针所指数据。
以上我们是使用了指向常量的指针*pc指向了只读的变量cnum。
如果我们这么做:让普通指针指向只读变量,并对其解引用来更改数据。
const int cnum = 1024;
int *p = &cnum;
这是一件很矛盾的事情,cnum为只读属性,但是*p为普通指针,是可以通过p更改p所指向变量的数据的。
于是会出现Warning:赋值从指针目标类型中丢弃“const”限定符 。 也就是说出现冲突,const这个限定符号被丢弃了。cnum又变为普通变量。
也就是说,如果我们定义的只读变量不想被指针用解引用的方式进行修改,只能将指针定义为指向常量的指针。
我们再让const修饰的指针pc指向普通变量:
int num = 520;
const int *pc = #
也就是说指向常量的指针现在指向的不是只读变量,是普通变量,
再次指向*pc = 888;语句,会发生什么?
答案是编译器报错,也即是说,如果指向常量的指针指向了变量num,也不可通过对指针pc解引的方式来改变num的数据。
既