const

--------siwuxie095

  

  

  

  

控制变化的 const:

  

1、const 与基本数据类型

  

2、const 与指针类型

  

3、const 与引用

  

  

  

  

  

const 与基本数据类型:

  

先看没有const 之前:定义一个 x,及其内存表示

  

  

当加上 const 后:由 变量 变成了 常量,x 就无法再得到更改,

如果再给x 赋值 5,就会报错,无法通过编译

  

  

  

  

  

  

  

  

  

const 与指针类型:

  

const 与指针类型的关系 比 const 与普通数据类型的关系要复杂

  

先看与一重指针的相关情况:

  

const 可以放在数据类型的前面,也可以放在数据类型的后面

二者完全等价

  

  

  

但将const 写在 * 后面,又有所不同

  

  

const 除了 加一处 之外,也可以 两处都加

  

  

  

  

  

如:

  

定义x,赋值 3,const int *p 指向 x 后,如果 p 再去指向

另一个地址&y,是可以的。因为 const 此时修饰的是 *p,

如果通过*p 进行重新赋值,是错误的

  

  

  

  

再如:

  

此时const 写在 * 后,就意味着 const 所修饰的 p 就只能

指向一个地址,不能再进行变化。如果使用p 再去指向 y

的地址&y,编译器将提示错误

  

  

  

  

  

再如:

  

如果在一个指针的前后,都使用了const,就意味着当使用 p

指向 x 之后,就不能再通过 p 来修改 x 本身的值,也不能将 p

指向其他的变量

  

  

  

  

  

  

  

const 与引用:

  

如:

  

定义x,赋值 3,const 定义一个引用 &y,y 是 x 的别名

  

如果给x 赋值 10,是正确的,因为 x 是可变的

  

如果给 y 赋值 20,是有问题的,因为 y 作为 x 的别名,

前面加了修饰符const,所以通过 y 来修改是有问题的,

但通过x 作修改是允许的

  

  

  

  

  

  

const 示例,以下都会报错:

  

  

  

  

  

  

  

const 示例,对比:

  

  

第一个是有问题的,x 是不可变的,而指针y 却是可变的,

如果定义一个可变的指针去指向一个不可变的变量,就意味

着有风险,即可以通过*y 的方式,来改变 x 的值,这对计

算机来说风险太大,编译器是禁止的

  

而第二个则没问题,x 可变,而指针 y 所指向的位置不可变,

x 本身具有 读 和 写 两种权限,而指针 y 只具有 读 权限,就

意味着用一个权限小的来接收一个权限大的变量,是允许的

  

  

  

  

程序:

  

#include <stdlib.h>

#include<iostream>

using namespace std;

  

  

int main(void)

{

//假如定义了一个const int x=3;

//其实相当于宏定义 #define X 3 (宏定义方式定义常量)

int x = 3;

int y = 5;

const int *p = &x;//等价于 const int *p=&x;

cout << *p << endl;

x = 10;//此时指针p不可以赋值 *p=10; 是错误的

cout << *p << endl;

p = &y;//但却可以指向其他变量

cout << *p << endl;

system("pause");

return0;

}

  

  

//int main(void)

//{

// int x = 3;

// int y = 5;

// int *const p = &x;

// *p = 10;//此时指针p可以赋值但却不可以指向其他变量 p=&y; 是错误的

// cout << *p << endl;

// system("pause");

// return 0;

//}

  

//int main(void)

//{

// int x = 3;

// int y = 5;

// //此时指针p既不能赋值(如 *p=10;也不能指向其他变量(如 p=&y;

// cout << *p << endl;

// const int *const p = &x;

// system("pause");

// return 0;

//}

  

//const与引用

//int main(void)

//{

// int x = 3;

// int y = 5;

// const int &z = x;//等价于 int const &z=x;

// x = 10;//此时不能给引用z赋值 z=10; 是错误的

// cout << z << endl;

//}

  

//函数中的const

//void fun(const int &a, const int &y);

//int main(void)

//{

// int x = 3;

// int y = 5;

// fun(x, y);

// cout << x << "," << y << endl;

// system("pause");

// return 0;

//}

//

//保证了传入函数内部的变量不会由于函数的误操作而改变变量的值下面的即为误操作

//void fun(const int &a, const int &y)

//{

// /*a = 10;

// b = 20;*/

//}

  

  

vs2013中:

  

  

  

  

  

  

  

  

  

  

  

  

【made by siwuxie095】

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值