在下微信公众号: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
以上皆为个人对这几个方面的东西的拙见,如有错误,还请多多指教,以交流为主,自主再行求证,不要盲目相信,谢谢你们的观看。