指针的算术用算
一、指针加1有三种情况:
1、加一个字节
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = arr;
*p = 10;
//由于arr[0]占4个字节,所以字节分别为100 101 102 103,所以将10转换成十六进制的10即a,一个字节八位所以在a的前面补7个0,此时将这八位数按低地址放地位,低地址在左边的顺序依次存放在100—103中,即0a 00 00 00 ;
p = (int *)((char *)p+1); //强制转换成字符型用完之后又转换成了int 型
*p = 20; // 经过加1之后增加了一个字节并没有跳到arr[1],这就
是为什么结果中arr[1]为0的原因,增加L 一个字节之后字节数就变成了102 102 103 104,然后将这个20存进去,将20转换为16进制即14所以在14的前面补够6个0,即00 00 00 14存进去之后100 102分别存的是0a 14,其他的全部为0;即此时的arr[0]的值就是0x 00 00 14 0a 他的结果为5130;
printf("%d,%d\n",arr[0],arr[1]); // 此时输出的结果为5130,0;
return 0;
}