看完还不会指针砍死作者系列③——指针运算

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++;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容