编程问题的精选解决方案
1. 指针与数组相关问题
1.1 指针使用效率
通常,一个程序 80% 的运行时间花在执行 20% 的代码上。在其他 80% 的代码中,语句的效率并不显著,因此使用指针所带来的效率提升并不足以证明其合理性。
1.2 指针与数组的混淆问题
在某些赋值操作中,编译器对指针和数组的理解可能与实际情况不符,从而导致问题。例如:
- 第一个赋值操作中,编译器认为 a
是指针变量,会获取存储的指针值,加上 12(3 乘以整数大小),然后对结果进行间接引用。但 a
实际上是字符数组的起始位置,这样获取的 “指针” 值将是数组中前四个字符的连接值,加上 12 后,间接引用将结果解释为地址,可能会获取内存中随机位置的内容,或者导致程序因寻址错误而终止。
- 第二个赋值操作中,编译器认为 b
是数组名,会将 12(3 的缩放结果)加到 b
存储的地址上,然后通过间接引用获取该位置的值。但 b
实际上是指针变量,从内存中再往后三个字获取的值将来自其他随机变量。这说明指针和数组虽然相关,但并不相同。
1.3 指针适用场景
当执行按内存中元素出现顺序访问元素的操作时,指针非常有用。例如:
- 初始化数组
- 读写数组的多个元素
- 通过递增指针来访问数组底层内存以扁平化数组
1.4 函数参数中的指针与常量
在函数参数中, const
关键字的