1.const修饰指针
1.1constr修饰变量
在前面文章提及关键字的时候讲到const可以修饰变量,函数。先来看看例子:
const具有常属性的意思,被他修饰的局部变量不可以被更改了(本质还是变量)。
但是如果我么绕过直接对a修改,利用他的地址找到并修改它呢?
可以看*pa绕过了const确实把a改了,但是我们用const修饰他不就是为了不被修改吗???
所以我们要对const的指针进行限制就可以避免这种情况。
1.2const 修饰指针变量
const修饰指针可以放在两个位置,一个是*前面,一个是*后面,他们的意义是不一样的。
1.2.1const放在*左边
*左边被const修饰的指针变量无法通过解引用去修改a,但是可以将自己的地址更改为&b。
举个例子:小美有个男朋友叫小帅,小帅兜里有100块钱,小美想要小帅请她吃饭,但是小帅就100块还有5天才发生活费,于是他就用const修饰了钱包,小美无法通过女朋友的身份去使用小帅的钱,但是她很聪明找到了舔狗小飞,把自己的眉眼抛给了小飞,但是小飞的钱包没有被const修饰,一下子就给了小美钱。
1.2.2const放在*右边
const放在*右边,是对这个指针本身的修饰,指针不能被修改了,就相当于小美不能去拿小帅的钱包,只能跟小帅绑在一起。但是他这时候可以动小帅的钱。
1.2.3const放在*两边
const放在*两边那可厉害了,被他修饰就相当于你既不能改变指向的对象,亦不能更改你本身的内容。
2.野指针
2.1野指针成因
1.指针未初始化:
我们知道局部变量是在栈上创建的,未初始化它是一个随机值,指针也是同理。
随机值就意味着他指向的地址可能是未被申请,还是属于操作系统,造成非法访问。


2.2如何规避野指针
2.2.1指针初始化
当指针在创建的时候没有明确指向,可以先给它赋值NULL(C语言的一个标识符常量),它的值是0,0也是地址,不过需要注意,这个地址是无法使用的,使用会报错。
2.2.2防止指针越界
2.2.3指针变量不再使⽤时,及时置NULL,指针使用之前检查有效性

2.2.4避免返回局部变量的地址
就是不要造成上面的那个错误三。
3.assert 断言


4.指针的使用和传址调用
4.1strlen的模拟实现
前面我们用指针相减模拟实现了my_strlen
现在根据它的原型来实现:size_t strlen ( const char * str );

4.2指针的传值调用和传址调用
