这篇博客是对于我个人的知识的复习,当然如果有某位大佬能够指出这里面有哪些概念含糊不清或者难懂,麻烦指出来感激不尽。
1.指针
指针恐怕C里最常见,最不起眼,但也比较难以掌握的知识。
- 计算机内存中的每个位置都由一个地址标识,通常,在邻近的内存位置合成一组,这样就允许存储更大的值,指针就是它的值表示内存的变量。(这里我们不考虑虚拟内存等问题)
- 通常无法通过值的位模式来判断它的类型。类型是通过值的使用方法隐式的确定的。
- 声明一个指针变量并不会分配任何内存,因此在指针执行间接访问操作前,指针必须进行初始化,或者指向现有内存,或者分配动态内存(new?malloc?),对未初始化的指针进行访问操作是非方的。
- NULL指针,可以赋值给一个指针,用来表示那个指针并不指向任何值,对NULL指针进行操作,结果因编译器而异,常见的后果是终止程序。(顺便说一句,在C++11中有了nullptr关键词来代替NULL,具体原因比较长,这里就不详细说了)
- 如果两个指针都是指向同一个数组的元素,那么它们之间可以相减。指针减法的结果经过调整,表示两个指针在数组中相隔多少元素,如果两个指针并不是指向同一个数组的元素,那么它们之间进行相减就是错误的。
选自《C和指针》
2.面试常考问题指针和数组有什么区别?
当我们声明一个数组时