目录
const修饰指针
const修饰变量
变量是可以被修改的,如果把变量的地址给一个指针变量,通过指针变量也可以修改这个变量。但是如果我们想要一些变量不能被修改,该怎么办呢?
这就需要const修饰了。
但如果硬要修改也有办法,可以通过地址修改。

const修饰指针变量
但这改变了我们不想变量被修改的初心,那该怎么办呢?既然这样,我们直接让const修饰指针变量就可以了。
但是这里的const放在 * 的左边和右边也有区别。
const 如果放在 * 的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。
但是指针变量本身的内容可变。
const 如果放在 * 的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针指
向的内容,可以通过指针改变。
野指针
概念: 野指针就是指针指向的位置是不可知的。(随机的、不正确的、没有明确限制的)
野指针的成因
指针未初始化

指针越界访问

指针指向的空间释放

如何规避野指针
指针初始化
小心指针越界
指针变量不再使用时,及时置NULL,指针使用前检查其有效性(p = NULL;)
避免返回局部变量的地址
assert断言
assert.h 头文件 定义了宏 assert(表达式) ,用于在运行时确保程序符合指定条件,如果不符合,就报
错终止运行。这个宏常常被称为“断言”。

assert() 的使用对程序员是非常友好的,使用 assert()有几个好处:它不仅能自动标识文件和出问题的行号,还有一种无需更改代码就能开启或关闭 assert()的机制。如果已经确认程序没有问题,不需要再做断言,就在 #include<assert.h>语句的前面,定义一个宏 NDEBUG。

assert()的缺点是,因为引入了额外的检查,增加了程序的运行时间。一般我们可以在 Debug 中使用,在 Release 版本中选择禁用 assert 就行,在 VS 这样的集成开发环境中,在 Release 版本中,直接就是优化掉了。这样在debug版本写有利于程序员排查问题,在 Release 版本不影响用户使用时程序的效率。
指针的使用和传址调用
strlen的模拟实现

传值调用和传址调用
传值调用

传址调用

408

被折叠的 条评论
为什么被折叠?



