指针 + - 数字
我们先来看一段代码:
int arr[10] = {1,2,3};
int *p = arr;
p++;
*p = 10;
这段代码里就包含了一个重要的知识:指针+1;
我们来分析一下指针+1在分配地址时会出现什么情况:
1、加一个字节;
2、加一个单元格;
3、加一个数组。
目前能想到的也就这么多了,我们一个一个来说其可能性。
首先是3、加一个数组,也就是指针直接从arr[0]->arr[9],而我们的目的是将arr[1]通过指针+1然后解引用变成10,直接加一个数组好像并不能实现这个功能。
所以我们pass掉这个选项:
1、加一个字节;
2、加一个单元格;
3、加一个数组。
接下来我们看看一次加一个字节:
整型数组的一个字节是4,我们假设指针++之后是加一个字节,那么我们把地址放大之后:
因为在数组中每个地址的值都是按pc小端存放,所以底地址放小数据,放完之后的样子如下:
而此时arr[0]=0xa01;arr[1]=0x0;
转成十进制的结果就是 2561,0;
所以加一个字节也是不可以的
1、加一个字节;
2、加一个单元格;
3、加一个数组。
所以我们只能选择最后一种情况
2、加一个单元格
这样好像确实就可实现了指针+1的能力,所以总结一下:
指针+数字,地址需要调整,调整的权重为:sizeof(指针去掉一个*);