指针 + - 数字

我们先来看一段代码:

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(指针去掉一个*);