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

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

2021-7-25 16:39
5148

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

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

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类型
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)

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//