直接理解const

 权限与初值

一个const

#include 

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 

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 
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定义的新的名字会放在最前面

你可能感兴趣的:(c++)