C++中的const关键字的用法

int x=3;//定义一个整形变量,并对其进行赋值为3,值后还可以对其进行修改操作:x=5;

const int x=3;//x经const修饰之后将会有一个变量变为一个常量,即整形变量x只能是代表3所在的内存单元当中的值,不能够去代表其它内存

//单元当中的值,此时若另x=5,编译将会出错,因为此时的x是一个常量只能代表3

const与指针搭配使用

      首先必须弄清楚两个基础概念:指针常量和常量指针

      指针常量:即指针本身的值是不可改变的,而指针指向的变量的值是可以改变的.(指针指向固定的寄存器地址不可以进行改变,但是寄存器当中的值是可以进行改变的)

const int *p于int const *p二者之时完全等价的,都是对*p进行修饰的,表明当前指针时一个常量,即当前指针指向的内存单元所存放的值是固定不可改变的。

const于指针之间:

int x=3;
int const *p=&x;//此处类似于计算机组成当中的二次寻址的方式,指针p指向CPU内部1号寄存器,在该寄存器当中存放&x(即变量x的地址值),所以p指
//向1号寄存器,*p为变量x的地址值,*p又被const修饰变为常量则表明1号寄存器当中所存放的地址值是一个不可以被进行修改的值,固定用于存放主
存单元当中变量x所在存储单元的地址值
p=&y;//则是另当前的指针指向CPU当中的2号寄存器,在2号寄存器当中所存放的是&y,即变量y在主存当中的地址编号存放于2号寄存器当中,此时引用
*p,CPU将会根据2号寄存器当中的地址值去主存当中进行去找,将指定地址内存单元当中的数据读取出来.
int x=3;
int * const p=&x;//此时是对指针p进行修饰使得指针p为一个常量,即当前指针p只能够指向存放变量x地址的1号寄存器且不能够改变,但是*p即寄存
器当中的内容是可以进行改变的
p=&y;//此时代码在运行时将会出现错误

      常量指针:即指针指向的变量的值是不可改变的,而指针本身的值是可以改变的(指针指向的内存单元当中存放的是一个常量,所以该内存当中的值是不能够进行改变的,但是指针可以去指向其他的内存单元);

      可以这样去理解:因为指针本身也是一个变量,只不过指针存放的是地址而已,而一旦指针变成了常量,即指针本身的值是不可变的,此时指针只能指向固定的存储单元;指针一般会指向一个变量,如果该变量成为一个常量,那么该变量的值就不能被修改,即常量指针,指针指向的是一个不可变的变量。

const于引用:

int const x=5;x=3;//此时程会报错,x经const修饰之后将是一个常量,该内存单元当中的值不可以再次被进行修改操作
int x=3,z=4;int * const y=&x;y=&z;//y是x的引用,且y经const修饰之后是不能够进行修改操作的.所以y=&z是错误的
#include<iostream>
using namespace std;
int main()
{
	int x=3;
	int y=5;
	int const &z=x;//定义x的引用z,即另z等价于x ,且引用z因为const的修饰变为了一个常量,所以不能够对z进行重新的赋值操作否则将会报错
	//z=5;引用z是一个常量,不能够进行赋值操作
	cout<<"z="<<z<<endl;//输出结果为3
	x=5;
	cout<<"z="<<z<<endl; //输出结果为5
}

const引用在函数间进行参数的传递:

#include<iostream>
using namespace std;
void fun(int &a,int &b);
int main()
{
	int x=3;
	int y=5;
	cout<<"x="<<x<<";y="<<y<<endl; 
	fun(x,y);//此处在进行参数的传递和函数的引用时相当于,&a=x,&b=y,即为x建立一个引用a,为y建立一个引用b 
	cout<<"x="<<x<<";y="<<y<<endl; 
}
void fun(int &a,int &b)
{//在对a,b进行赋值实际也就是在对x,y进行赋值操作,因为ab是xy的别名 
	a=10;
	b=20;
}
//若将fun函数当中的参数用const进行修饰之后将不能够进行赋值操作
void fun(const int &a,const int &b)
{//此时将不能够对ab两个参数进行赋值操作,因为此时的a,b都为常量
	a=10;
	b=20;
}




const(常量) 相当于一个常量修饰符

1 int a=3;
2 const int*p=&a;//const 对整形变量指针进行修饰之后,该指针*p将变为一个常量指针,指向变量a所在的固定的内存单元地址,且不能够在指向其它
//地址,但是该内存单元当中的值是可以进行改变的
3 int const *p1=&a;//第三行和第二行是等价的
4 *p=4;//该行代码时错误的,因为指正*p是一个常量指针,所以只能指向一个固定的地址&a,不能够再指向另一个常量4所在的地址
5 a=4;//在&a所在的变量地址空间当中进行重新的赋值操作,即将一个新的数字放到&a所在的存储单元当中去



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值