在下微信公众号:welldo。欢迎关注(虽然现在好像啥也没有)
//方便演示,先初始化一个指针为空。 int* a = nullptr; a = a+1;//+1就偏移一个单位,而a定义的是指向int型数据的指针,int型有4个字节,所以输出就是00000004
//假设我们定义一个一维数组
int arr[5]={1,2,3,4,5}; int* p= &arr[0];//这里也可以直接写成arr p = p+1;//相当于p = &arr[0+1] *p; //所以*p = 2; /* 如果我们再定义一个指针 因为前面的p已经指向了arr[1],为了达到更好的演示效果, 就让p1指向不同的地址 */ int* p1=&arr[2]; /* 根据前面的我们很明显可以看出 **p1也就是&arr[2]是可以看做&arr[1]+1的** 而&arr[1]又是等于p的,故p1=p+1,所以结果显而易见 */ p1-p;
在project的介绍中说了,指针偏移一个单位,单位的大小由指向的数据大小决定。
所以我们数组指针的偏移就需要注意,要看指针指向的这个数组的大小。
//取整个数组的地址,也就是用这个数组的首地址初始化指针,
int* p2=&arr;//在数值上,&arr与&arr[0]一样,但意义不懂,所以不相等。
p2+1;//这此偏移的一个单位就要看arr的大小了,上文定义的大小为5,里面的数据类型都是int型,所以整个数组所占字节数为20