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修饰,表示以后对该变量仅有只读操作,强调只读性。