首页
社区
课程
招聘
[原创]深入理解C语言四-指针的运算
2021-7-25 16:39 4345

[原创]深入理解C语言四-指针的运算

2021-7-25 16:39
4345

指针支持加减运算,不支持其他算术运算。对于指针p,指针的加法运算p+n,p向后移动的距离不是n个字节,而是n个指针所指数据类型的单位长度,减法运算与此类似。

指针的运算

1、是什么类型的指针参与运算
2、指针怎么运算
3、运算后得到什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
int array[3][4] = {{0x10,0x20,0x30,0x00},
        {0x40,0x50,0x60,0x00},
        {0x70,0x80,0x90,0x00}};
 
int(*p)[4] = array;
printf("%p\n", p);
//p是int[4]类型的数组指针
 
printf("%p\n", *p);
//p是int[4]类型的数组指针,*p得到int[4]的标志符引用,*p是int类型的指针常量
 
printf("%0x\n", **p);
//*p是int类型的指针常量,**p得到int类型指针常量的标志符引用,**p是int类型
printf("\n");
 
printf("%p\r\n", p + 1);
//p是int[4]类型的数组指针,(int)(p+sizeof(int[4])*1)
 
printf("%p\r\n", (p + 1) + 1);
//(p+1)是int[4]类型的数组指针,(int)((p+1)+sizeof(int[4])*1)
 
printf("%p\n", *(p + 1));
//p+1int[4]类型的数组指针,*(p+1)得到int[4]的标志符引用,*(p+1)是int类型的指针常量
 
printf("%p\n", *(p + 1) + 1);
//*(p+1)是int类型的指针常量,(int)(*(p+1)+sizeof(int)*1)
printf("\n");
 
printf("%p\r\n", *p + 1);
//*p是int类型的指针常量,(int)(*p+sizeof(int)*1)
 
printf("%0x\n", *(*p + 1));
//*p+1int类型的指针常量,*(*p+1)得到int类型指针常量的标志符引用,*(*p+1)是int类型
 
printf("%0x\r\n", *(*p + 1) + 1);
//(*p+1)是int类型的指针常量,*(*p + 1)得到int类型指针常量的标志符引用,*(*p + 1)是int类型
printf("\n");
 
printf("%p\r\n", p[1]);
//p[1] == *(p+1),p[1]是int类型的指针常量
 
printf("%p\r\n", p[1] + 1);
//p[1]+1 == *(p+1)+1*p[1] + 1int类型的指针常量
 
printf("%0x\r\n", p[1][1]);
//p[1][1] == *(*(p+1)+1),p[1][1]是int类型
 
printf("%0x\n", (p[1] + 1)[1]);
//p[1] == *(p+1),*(p+1)是int类型的指针常量,
//(p[1]+1)[1] == *(*(p+1)+1+1) ,*(p+1)是int类型的指针常量, *((int)(*(p+1)+sizeof(int)*1+sizeof(int)*1))
// *(*(p+1)+1+1)是int类型,(p[1] + 1)[1]是int类型
 
printf("%0x\r\n", *p[1] + 1);
//*p[1]+1 == *(*(p+1))+1*(p+1)是int类型的指针常量,*(*(p+1))是int类型

github:https://github.com/0I00II000I00I0I0

bilibili:https://space.bilibili.com/284022506


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回