C++学习4_const关键字

const关键字

1. 普通变量与const关键字

const修饰的变量称为const常量

定义的时候必须要初始化,且作为常量,不能修改。

//const关键字修饰的变量称为常量
const int number1 = 10;
int const number2 = 20; 

//error 常量必须要进行初始化
const int val;

除了这种方式可以创建常量外,还可以使用宏定义的方式创建常量

const常量与宏定义的区别?
  1. 编译器处理方式不同。宏定义是在预处理阶段展开,做字符串的替换;而const常量是在编译时。
  2. 类型和安全检查不同。宏定义没有类型,不做任何类型检查;const常量有具体的类型,在编译期会执行类型检查。

在使用中,应尽量以const替换宏定义,可以减小犯错误的概率。


2. 指针与const关键字

  1. const位于*左边的时候(const*),称为常量指针(pointer to const),

    **特点:**不可以改变指针所指变量的值,可以改变指针的指向(本身)。

  2. const位于*右边的时候(*const),称为指针常量(const pointer),

    **特点:**可以改变指针所指变量的值,不可以改变指针的指向(本身)

  3. 双const:两个const修饰变量,

int value = 10;
int *p1 = &value;
*p1 = 11;
/* p1 = NULL; */
p1 = nullptr;   //c++的空指针写法

//当const位于*左边的时候,称为常量指针(const*)(pointer to const)
//即const修饰的是*p整体;
//即*p3是常量,不能修改,即不能修改指针所指变量的值;
//但可以修改指针本身的值,即指针的指向。
cout << endl;
int value2 = 200;
const int *p2 = &value2;
cout << "*p2 = " << *p2 << endl;
/* *p2 = 222;   //报错error */
p2 = &value;	//ok
cout << "*p2 = " << *p2 << endl;

cout << endl;
int value3 = 300;
int const *p3 = &value3;
cout << "*p3 = " << *p3 << endl;
/* *p3 = 333;//报错error */
p3 = &value;//ok
cout << "*p3 = " << *p3 << endl;

//当const位于*右边的时候,称为指针常量(*const)(const pointer)
//即const修饰的是p4,
//即p4是常量,不可以修改指针本身的值p4,即指针的指向
//但可以修改指针所指变量的值:*p4
cout << endl;
int value4 = 400;
int * const p4 = &value4;
cout << "*p4 = " << *p4 << endl;
*p4 = 444 ;//ok,可以修改指针所指变量的值
/* p4 = &value;//error, p4本身不能被改变,不可以修改指针的指向(本身) */
cout << "*p4 = " << *p4 << endl;

//双const
cout << endl;
int value5 = 500;
const int * const p5 = &value5;
cout << "*p5 = " << *p5 << endl;
/* *p5 = 555 ;//error, 不可以修改指针所指变量的值 */
/* p5 = &value;//error, 不可以修改指针的指向(本身) */
cout << "*p4 = " << *p4 << endl;

3. 成员函数与const关键字

4. 对象与const关键字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值