1、指针运算
指针的运算包含:算术运算、关系运算和赋值运算,运算的结果和指针指向对象的类型有关,比如float类型的指针+1将会偏移4个字节:
float
通过地址的偏移,可以访问连续的内存空间,采用*(pointer+偏移量)的方式,可以访问当前pointer指向地址的“偏移量”处的内存空间,比如*(pointer+n)表示pointer类型偏移“n”个类型长度后的地址处的值 ,等价于pointer[n]:
float
2、空指针
指针定义以后,如果没有对指针进行赋值,以指定其所指向对象的地址,那么这个指针如果被误用就可能导致安全问题。为此,C++提出了空指针的概念,通过对指针赋值为0或者NULL即为空指针。
float
void类型的指针表示不确定指向类型的指针,这和空指针是有区别的。
3、处理数组
数组的名称表示数组的首地址,首地址就是数组首个元素的地址,也就是说数组名称和数组首元素的地址等价,数组首元素的地址为“&d数组名[0]”,例子如下:
/// 下面用数组名和数组首元素,都可以获得相同的地址,即数组首地址
因此,可以采用数组名和指针两种方式对数组进行访问:
int
4、指针数组
C++中,同类型的指针的集合构成的就是指针数组,指针数组的名称依旧表示该数组的首地址,数组中每个指针的使用和基本的指针符合相同的规则。声明指针数组的语法如下:
数据类型
指针数组的使用即元素的使用,指针数组中第i个元素为“数组名[i]”,即数组中第“i”个指针。根据指针的基本用法可知,可以使用“数组名[i]+偏移量”的方式,获得指针元素指向的连续地址。
/// 1、定义多个一维数组
5、使用指针作为函数参数
如果数据的存储区域是连续的,那么通过指针作为实参,将数据的首地址传递给函数的形参,就能实现高效的数据传递。此时,由于指针作为函数参数时,传递的是地址而不是值,所以对形参的修改会影响实参。下面定义的函数的参数为指针,只要将想要操作的变量地址作为实参,那么对形参的修改就会影响到实参:
void