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所在的存储单元当中去