指针算术运算分为指针加法运算和指针减法运算。
一、指针加法运算
这里对指针加常数(如int*p,p++)进行讨论
指针加指针 非法
假设指针+1有以下三种情况:
1、加一个单元格 (正确)
2、加一个字节
3、加整个数组(没有意义)
#include<stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = arr; //*p = arr[0]
*p = 10; //arr[0] = 10
p++; //给指针加1
//p = (int *)((char *)p+1);
*p = 20;
printf("%d,%d\n",arr[0],arr[1]);
return 0;
}
(1)首先验证第二种情况,假设指针+1为加一个单元格,根据以上代码分析如下:
注:两个十六进制数可以表示为8个位的二进制数
数据类型int每个单元格为4个字节
十进制的10转化为8位的十六进制数为: 0000000a //二进制数为32位
十进制的20转化为8位的十六进制数为: 00000014
综上得出:指针+1表示加一个字节是错误的。
<