int arr[10]={1,2,3};
int *p = arr;
*p=10;
p++;
*p=20;
(假设a的地址如下图)
那么现在问题来了,p++之后指向的是arr数组中那个元素呢?(arr数组int型则一个元素占四个字节我们称为一个格子)
假设有三种符合p++
1、加一个字节 2、加一个格子 3、加一整个数组
10进制10转换成16进制为a,在pc端低地址保存小数据,4个字节保存八个16进制数。所以a写成0x0000000a。
0a保存在arr[0]中的100中的前一位,因为一个字节可以保存两个16位进制数,剩下的00......按照权重的大小保存在四个字节中。现在经过p++后如果是第一种答案那么p现在指向地址101,20是十进制换成16进制为0x00000014,14存放在101的前一位,剩下的00......依次存放,这时p的值现在为5130,不是我们预想中的20,所以第一种方法不可行。
第三种方法是:p开始指向100,p++之后指向111,直接加在数组的末尾,这种方法不是我们所需要的。
所以指针加法是第二种:指在++之后指向下一个格子,这个格子大小也随之变化,如果数组为char 型数据,那么指针++之后加一个字节,int型则加4个字节,double则加8个字节。