指针算术运算--P++怎么加

示例:

下面的代码中,p++,是添加的()

A、加一个字节

B、加一个格子

C、加一个数组

#include

int main()

{

int arr[10]={1,2,3,4};

int *p=arr;

*p=10;

p++;//???什么地方做了添加呢????

*p=20;

printf("%d,%d\n",arr[0],arr[1]);

}

代码结果:

 指针算术运算--P++怎么加_第1张图片

分析:

数组arr[10]可以看做:

 

现假设*arr[0]=100

则,数组arr[10]可以看做:

 

①、假设,p加的是一个数组,即arr后再加一个数组,arr[0],arr[1]不会变,故p+的是一个数组这个想法是错误的。

②、假设p加的是一个字节:

首先arr[0],arr[1]用字节可以表示为:

注:arr[0]=1,arr[1]=2;转换成十六进制分别是:00000001,00000002;

10和20的十六进制分别是:0X0000000a,0X00000014。

  因为pc是小端,故有低地址放小数据;高地址放大数据。

故有:

 

如果p++是指加一个字节,则有:

 指针算术运算--P++怎么加_第2张图片

此时,绿色框中存储10(即0a 00 00 00,前有空字节故,p++值加一个字节显然不对。

③、p++表示加一个格子(即加四个字节):

就有:

 指针算术运算--P++怎么加_第3张图片

此时,可以输出arr[0],arr[1]。结果正确。

 

由此可得,指针算数运算中p++加的是格子。

你可能感兴趣的:(指针算术运算--P++怎么加)