1.指针是什么?谈谈对指针的理解?
指针是一种数据类型,它可以定义变量,变量保存的值是地址,由于地址是固定长度,所以指针变量的长度是固定长度;不同地址的步长不一样,需要不同指针类型的变量来保存;
作用:由于指针变量可以保存地址,所以可以直接操作地址,也就是可以直接操作寄存器地址,从而实现直接访问硬件
int * p;//整型指针变量;p是一个变量,保存的是地址,地址是整型地址
地址为什么分不同的类型?---》不同类型的指针变量保存不同步长的地址
地址属性:步长(加一所移动的字节数)
&p怎么保存?
二级指针,
int **pp; //整型指针的指针变量
pp是一个变量,保存的是一个地址,地址对应的内存空间中保存的还是一个地址,这个地址是整型的
多级指针作用:用来保存上一级指针变量的地址(远指针 ,近指针)
什么时候使用多级指针?
多维数组时候使用
指针之间的运算:
赋值:相同类型指针之间的赋值
短指针赋值给长指针,会多取数据
长指针赋值给短指针,会丢失数据
p + 操作数 指针 + 指针:error
p - 操作数 指针 - 指针:相差数据类型的个数
注意:万能指针 void * 可以接收任意类型,步长一个字节
万能指针作用:函数返回可能为不同类型的地址
总结而言:首先指针是一种数据类型,它可以定义变量,变量保存的值是地址,由于地址是固定长度,所以指针变量的长度是固定长度;不同地址的步长不一样,所以需要不同指针类型的变量来保存;由于指针变量可以保存地址,所以可以直接操作地址,也就是可以直接操作寄存器地址,从而实现直接访问硬件,细说指针变量的话,指针又有多级指针,多级指针直接点说就是能保存上一级指针的地址,多数在操作多维数组中的元素时候使用多级指针,指针的赋值只能发生在相同类型的指针之间,如果步长不同,短指针赋值给长指针,会多取数据;长指针赋值给短指针,会丢失数据,还有万能指针可以接收任意类型的指针,但是其操作步长只有1个字节,用在函数返回可能为不同的类型的地址时使用,例如malloc的分配函数返回值就是void *,所以在分配内存时前面需要加上对应类型的强制类型转换。