概念:指针是一种数据类型,它是一种保存地址的数据类型。
定义:存储类型 数据类型 * 指针变量名;
Int * p;
//定义了一个指针变量p,p用是用来保存地址的
数据类型:指针指向的数据类型(指针保存的是什么数据类型的变量的地址)
指针的数据类型:int *
指针的赋值:指针的赋值相当于改变指针的指向
(指针赋值时要注意 指针指向的数据类型必须相同)
空指针:指向零号地址的指针(值为0的指针,就认为该指针没有指向)
注意:零号地址禁止操作
野指针:不知道指向哪里的指针,局部变量,没有初始化,随机值
局部指针变量,如果没有初始化,就是野指针
二级指针:保存一级指针的地址
总结:
- 指针的数据类型,去掉变量名就是数据类型
- 指针指向的数据类型,去掉的一个*和变量名,剩下的就是指针指向的数据类型
- 指针所能访问到的内存空间的大小,由指向的数据类型决定
指针的算术运算:
p+n:p向地址增大的方向移动了n个数据
p实际的变化:p + sizeof(指针指向的数据类型)*n
P-n: p向地址见效的方向移动了n个数据
p实际的变化:p - sizeof(指针指向的数据类型)*n
P++: p向地址增大的方向移动了一个数据 //改变指针的指向
p = p+sizeof(指针指向的数据类型)
P--:p向地址减小的方向移动了一个数据 //改变指针的指向
p = p-sizeof(指针指向的数据类型)
p-q:(p和q数据类型必须相同):这两个指针之间相隔的个数
实际的变化:(q-p)/sizeof(指针指向的数据类型)
数组指针:
概念:指向数组的指针
定义:存储类型 数据类型 (* 变量名) [元素的个数];
Int (*p)[3];
//定义了一个指向数组的指针p,指向的这个数组:有3个int类型的元素
数组类型:指针指向的数组中的元素数据类型
P:数组指针的数据类型: int (*)[3];
p指向的数据类型:int [3]
指针数组:
概念:元素为指针的数组
定义:存储类型 数据类型 * 变量名[元素的个数];
Int * arr[3];
//相当于定义了一个数组,这个数组种有三个元素,每一个元素都是int *类型
数组中元素的数据类型:int *