直接理解const

文章讲述了C++中const关键字如何影响指针的行为,包括常量指针只能被解引用读取值,而非常量指针可改变值和指向。还提到typedef可能导致的误解,即typedefint*pint实际上定义了一个constint*的别名。
摘要由CSDN通过智能技术生成

 权限与初值

一个const

#include <iostream>

int main() {
	int x = 1;
	int y = 2;

	const int* ptr1 = &x; 
	int const* ptr2 = &x;
	int* const ptr3 = &x;

	//*ptr1 = 3;
	ptr1 = &y;

	//*ptr2 = 3;
	ptr2 = &y;

	*ptr3 = 3;
	//ptr = &y;
    
    return 0;
}

从左往右看,有指针了,就是改值改指向的问题

总的来说const只能作用一个,要么是 *,要么是变量ptr;从左往右挑近的限制(缩小权限)

限制效果如下:

1.指针变量  可以通过解引用更改值,不可以更改指向     常量指针    (必须要赋初值)ptr3

2.       *        不可以通过解引用更改值,可以更改指向     非常量指针(可以不赋初值) ptr1,2

注:不是不可以解引用

顾名思义,常量(不能修改的)指针(指向一个变量),那么就是只能指向一个且一次,那就一定要赋初值,(有妻且不能离婚)

两个const

#include <iostream>

int main() {
    int x = 1;
    int y = 2;
    
    const int* const ptr4 = &x;
	const int const* ptr5 = &x;
	int const* const ptr6 = &x;

    cout << *ptr4 << endl;

    //*ptr4 = 3;
	//ptr4 = &y;

	//*ptr5 = 3;
	ptr5 = &y;

	//*ptr6 = 3;
	//ptr6 = &y;

    return 0;
}

也是非常简单,有//的语法错

这个ptr5和上面的ptr1,ptr2 一样

ptr4和ptr6就只能通过解引用读取里面的值 不能更改指向更改值

有个关于typedef的坑

#include <iostream>
using namespace std;
typedef int* pint;

int main() {
    int x = 1;
    int y = 2;
    
    const pint ptr7 = &x;

	*ptr7 = 3;
	//ptr7 = &y;
	cout << typeid(ptr7).name() << endl;

    return 0;
}

一般都会认为 等价于 const int* ptr7

实际上是int* const ptr7

typedef定义的新的名字会放在最前面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值