1、地址运算需在连续空间下进行
2、堆上的指针运算属于未定义行为
int *p1 = (int*)malloc(sizeof(int));
int *p2 = (int*)malloc(sizeof(int));
p1 - p2;//堆上的指针运算是未定义行的结果 无意义
3、指针的偏移,只能进行‘+’,‘-’运算
4、指针间运算,指针间运算只能进行减法计算出指针偏移量
int temp[] = { 1,2,3,4,5 };
int* p_1 = temp + 3;
int* p_2 = temp + 7;
printf("%d\n", p_1 - p_2);//4
5、“上古时期”使用指针偏移比使用数组下标快,现在差不多
int a[] = { 1,2,3,4 };
char* p = a;
a[3] = 8;
汇编角度:
00C84D5E mov eax,4
00C84D63 imul ecx,eax,3
00C84D66 mov dword ptr a[ecx],8
*(p + 3) = 8;
汇编角度:
00C84D6E mov eax,dword ptr [p]
00C84D71 mov byte ptr [eax+3],8
6、指针间比较,比较地址需在连续空间下进行
while (p_1 != p_2)
{
p_1++;
}