指针常量、常量指针和引用(本质是 *const)This的理解 |
您所在的位置:网站首页 › 次数是不是常量 › 指针常量、常量指针和引用(本质是 *const)This的理解 |
在面试中我们经常会被面试官问到什么是常量指针,什么又是指针常量。可能第一次被问到都会有些懵逼(大神略过)。我今天就来讲一讲这二者的区别。 下面开始正题。。。。 指针常量指针常量:顾名思义它就是一个常量,但是是指针修饰的。 格式为: int * const p //指针常量 在这个例子下定义以下代码: int a,b; int * const p=&a //指针常量 //那么分为一下两种操作 *p=9;//操作成功 p=&b;//操作错误 因为声明了指针常量,说明指针变量不允许修改。如同次指针指向一个地址该地址不能被修改,但是该地址里的内容可以被修改 常量指针常量指针:如果在定义指针变量的时候,数据类型前用const修饰,被定义的指针变量就是指向常量的指针变量,指向常量的指针变量称为常量指针,格式如下 const int *p = &a; //常量指针
int a,b; const int *p=&a //常量指针 //那么分为一下两种操作 *p=9;//操作错误 p=&b;//操作成功 因为常量指针本质是指针,并且这个指针是一个指向常量的指针,指针指向的变量的值不可通过该指针修改,但是指针指向的值可以改变。 int const*p=const int *p;都表示*p的值不能改变,而p(即地址)是可以改变的; 附加题指向常量的指针常量该怎么写? 答案: const int * const b = &a;//指向常量的指针常量 引用(本质是*const)1)Const int & e 相当于 const int * const e //e是指向常量的指针常量,既不能修改其值,也不能修改让其指向其他内存空间; 2)普通引用 相当于 int *const e1 3)当使用常量(字面量)对const引用进行初始化时,C++编译器会为常量值分配空间,并将引用名作为这段空间的别名,但是他不能修改值,也不能修改让其指向其他内存空间;就是一个指向常量的指针常量,例如:const int &m = 43; //==const int * const m = 43; 4)使用字面量对const引用初始化后,将生成一个只读变量 例子: #include using namespace std; //常引用的知识架构 void main1301() { //普通引用 int a = 10; int &b = a; printf("b:%d \n", b); //常引用 int x = 20; const int &y = x; //常引用 是 让变量 引用只读属性 不能通过y去修改x了 //y = 21; //常引用 初始化 分为2种情况 //1> 用变量 初始化 常引用 { int x1 = 30; const int &y1 = x1; //用x1变量去初始化 常引用 } //2> 用字面量 初始化 常量引用 { const int a = 40; //c++编译器把a放在符号表中 int &m = 41; //普通引用 引用一个字面量 请问字面量有没有内存地址 //引用 就是给内存取多个门牌号 (多个别名) //printf("&40:%d \n", &40); const int &m = 43; //c++编译器 会 分配内存空间 ==const int * const m = 43; } cout |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |