基本知识框架
课堂笔记
- 关于指针
-
- 指针是用于存放地址的变量,通过指针可以为宜标示一块地址空间
-
- 不同数据类型的指针大小根据不同的平台,分为4字节和8字节,那么指针类型的意义是什么?
-
-
- 指针+/-整数时的步长,会因为指针类型的不同而不同
-
-
-
- 指针的类型决定了对指针进行解引用操作的权限大小(指针能操作的字节数)。例如int a = 1000,分别用char* pa1和int* pa2去获得变量a的地址, 他们能得到的地址都是一样的,但是当我们进行解引用操作时,*(char* pa1)与*(int* pa2)得到的值是完全不一样的。
-
-
- 野指针的成因及如何规避野指针
-
-
- 成因:
-
-
-
-
- 指针未初始化
-
-
-
-
-
- 指针越界访问
-
-
-
-
-
- 指针指向空间释放(例如,在主函数中调用一个函数,在函数中创建一个变量,以该变量的地址作为返回值,这类的操作是错误的,当函数执行完毕后,创建的临时变量已经被销毁,再返回其地址已无任何意义)
-
-
-
-
- 规避方法:
-
-
-
-
- 指针要初始化
-
-
-
-
-
- 注意指针越界访问
-
-
-
-
-
- 指针空间释放后,及时置NULL
-
-
-
-
-
- 指针使用前检查有效性
-
-
-
- 指针的运算
-
-
- 虽然指针也是一种变量,但并不是所有的运算符都可以用于指针
-
-
-
- 为了更清晰的描述指针的运算,以下的解释都是在数组int arr [10]的基础上进行讨论,但是并不是说指针运算只能用于数组
-
-
-
- 指针+/-整数
-
-
-
-
- 对于数组,&arr [5] + 1 = &arr [6],&arr [5] - 1 = &arr [4] ,可以很容易的看出在数组中数组元素指针 +/- 整数n = 另一个指针,指向当前数组元素之前或之后n个元素。从地址上看,原数组元素地址 +/- n*数组元素类型的字节大小 = 另一个元素的地址
-
-
-
-
- 指针 - 指针
-
-
-
-
- 对于数组,&arr [9] + &arr [0] = 9,&arr [0] - &arr [9] = -9,可以很容易的看出两个数组元素的地址相减,得到的是这两个元素之间相差的元素个数。更通用的说法,两个同种数据类型的指针相减,得到的是这两个地址之间能存放的该类型数据的个数
-
-
-
-
- 指针大小的比较
-
-
-
-
- 单纯的比较指针地址的大小,对于数组,&arr [9] > &arr [0]
-
-
-
- 指针与数组的联系
-
-
- & + 数组名,这里的地址和该数组的首元素地址在数值上一样,但这里的地址值的是数组的地址
-
-
-
- sizeof(数组名)计算的是整个数组的大小
-
-
-
- arr,&arr [0],&arr在数值上都一样,但三者的意义并不相同:
-
-
-
-
- arr指的是数组首元素的地址,arr + 1指向它下一个元素的地址
-
-
-
-
-
- &arr [0]也指的是数组首元素的地址,arr + 1指向它下一个元素的地址
-
-
-
-
-
- &arr指的是数组的地址,&arr + 1指向数组之后的地址
-
-
-
- 二级指针:指针的指针被称为二级指针,因为指针也是一种变量,所以理所当然的也会占用存储空间,所以也就可以用二级指针去存储指针的地址。例如int a = 10,int* pa = &a,int** ppa = &pa,int** = int* *
-
- 指针数组和数组指针:
-
-
- 指针数组:由指针变量组成的数组,如int* arr [10]
-
-
-
- 数组指针:顾名思义,就是数组的指针
-
基本知识框架Xmind文件下载
链接: 资源下载