const 修饰不同内容区分

1.修饰局部变量

	const int a = 1;
	int const a = 1;

这两种是一样的

注意:

const int b;

该情况下编译器会报错:常量变量"b”需要初始值设定项

将一个变量没有赋初始值直接const修饰后,在以后时无法更改内容的。

2.修饰常量字符串

a.直接更改str指向的内容

	const char* str = "abcdef";
	a.直接更改str指向的内容
	const char* ptr = "EMO";
	cout << "str:" << str << endl;
	str = ptr;
	cout << "str:" << str << endl;

可以直接修改常量字符串的指针变量(这里指str,ptr)

b.修改指针变量里的内容

	const char* str = "abcdef";
    *str = 'A';
	cout << "str:" << str << endl;

报错:

E0137表达式必须是可修改的左值
C3892"str”:不能给常量赋值

说明指针变量指向的内容是被const修饰了变成常量了(右值),而指针变量并未被修饰依旧可以改变

3.常量指针与指针常量

定义区分:
1.常量指针:针指向的内容是常量

2.指针常量:指针本身是个常量,不能在指向其他的地址

a.常量指针

两种形式

	const int* pa1 ;
	int const* pa2 ;

理解:

先理解int* pa1(单纯理解记忆)

所以常量指针不能通过该指针去修改指针所指内容

	a.通过const修饰的指针修改a
	*pa1 = 2;

但是不通过该指针变量去修改,原变量可以修改时,也可以通过别的方式修改:
 

	b.直接修改
	a = 2;
	cout << "修改后a:" << a << endl;

b.指针常量

基本形式
int* const n;//及时给初始值,类似上述局部变量中const int b;

理解:

此时的const直接修饰该指针变量,所以指针常量是指针本身是个常量不能在指向其他的地址

	int a = 1;
	int b = 2;
	int* const pa1 = &a;
	pa1 = &b;//报错E0137表达式必须是可修改的左值

但是可以通过const指针去修改内面内容

	cout << *pa1 << endl;
	*pa1 = 3;
	cout << *pa1 << endl;

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值