1. 指针
1.1 指针常量
使用int * const p = &a;
的模式,指针常量是常量,所以p对应的常量为a的地址,因此a可变,但地址不可变。
1.2 常量指针
使用const int *p = &a
的模式,其实这里和const无关,p只是个指针,该指针的类型是const int类型,因此p可以修改指针指向其他的const int类型,但无法修改指向的内存中的值(可以通过其他的引用来修改,const可以指向非const,非const不可指向const)。
2. 结构体
结构体const
为了防止在函数中修改原本的结构体内容,因此需要将函数的形参声明为const类型,即const struct student *p
,也就是p指针的类型是const struct student *
类型,因为无法修改结构体。联想到Android开发中的局部变量final修饰,表示以后对该变量仅有只读操作,强调只读性。
3. C++内存模型
分为四区,代码区、全局区、栈区、堆区。代码区存放着代码文件、编译好的文件由操作系统控制,特点是共享和只读,全局区存放静态变量、字符串常量、全局常量、全局变量,栈区存放函数的形参、局部变量,由编译器控制,堆区存放new出来的对象,手动delete释放(释放数组时delete [])。其中new关键字返回的是指针。
4. 引用
引用的符号为&
,案例为
int a = 10;
int & b = a; //等价于 int * const b = &a;因此无法修改引用,只能修改对应的值
引用常量,const int & b = 10
,常常用在修饰形参,保证不被修改。
5. 重载
...