我们知道const是一个修饰符,它加在变量的前面说这个变量不能被修改.指针是一种变量,在这种变量里面我们知道它有两个东西,一个是指针本身,一个是指针所指的那个变量.指针本身可以是const,指针所指的那个变量也可以是const.他们有什么样的区别和联系呢.
1.指针是const
因为q所指向的那个i不是const,所以我们可以随便修改它的值,但是如果我们做q++的操作就是不允许的,因为q这个地址指向i的关系是const的(我觉得比较好理解的一种方式是,这个地址是const).
2.所指是const
这样定义很容易会把i认为是const,但其实是不能通过这个指针去修改那个变量,不能用通过*p的操作来修改i的值.
3.这些都是啥意思
我们只有两种意思,一种是指针不能修改,一种是不能通过指针修改.第一个const和第二个const是等价的,都是表明指针不能通过指针修改,然后第三种区别于另外两个,意思是指针不能修改.判断哪个被const的标志是const在*的前面还是后面.
4.转换
总是可以把一个非const的值转换为一个const的值.
第一句话其实是什么意思呢,它的意思是,f说你给我一个指针,我保证我在我的函数内部不会去动指针所指的值.当然本来是一个const的值交给f也没有任何问题. 其实这种做法有点类似于我们传数组,我们的数组可以很大,1000个int,2000个int等等,那么我传整个数组进函数的时候,我传的其实是指针,我其实以指针的形式传进去.这是我们常用的一种传结构的方法.
5.const数组
如果不初始化,后面你再想赋值就不行了.
6.保护数组值