指针、++、--前置后置不同运算
来源:互联网 发布:蓝牙连接软件 编辑:程序博客网 时间:2024/05/17 06:51
题:
char *c[] = {"ENTER","NEW","POINT","FIRST"};
char**cp[] = {c+3,c+2,c+1,c};
char***cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", *--*++cpp+3);
printf("%s\n", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
图:
1、**++cpp(红线)
首先++cpp,cpp指向cp首地址,++指向c+2前的地址,先得到数组cp的第二个元素c+2,解引用*++cpp也就是*(c+2),指向数组c的第三个地址,再解引用*(*(c+2))就得到POINT。
2、*--*++cpp+3(绿线)
根据符号优先级,首先是++cpp,由于1里面cpp已经指向了数组cp的第二个元素地址,所以这里++cpp就指向数组cp的第三个元素地址;然后解引用*++cpp得到数组cp的第三个元素c+1,然后--*++cpp相当于--(c+1),也就是得到c,而c里面存的是数组c的首元素地址,再解引用*c得到数组c的首元素ENTER,加3就从E开始向后数3,就是E输出就是ER。
3、*cpp[-2]+3(蓝线)
上面1和2的操作之后,cpp目前指向数组cp的第三个元素地址,cpp[-2]就相当于指向数组cp的第一个元素地址,解引用*cpp[-2]得到c+3所指的FIRST,加3就从F开始向后数3就是S,输出就是ST。
4、cpp[-1][-1]+1(橘黄色线)
此时cpp 指向数组cp的第三个元素c+1,cpp[-1]指向数组cp的第二个元素c+2,再执行cpp[-1][-1]相当于(c+2)[-1],也就是*(c+2-1),也就是*(c+1),得到数组c的第二个元素地址,是NEW地址,加1从N往后数1就是EW地址,输出EW。
- 指针、++、--前置后置不同运算
- 前置运算 后置运算
- C++运算符前置后置
- 前置和后置运算符
- 前置(后置)++ /--与+/-在不同编译器下运算方式不同
- 前置运算与后置运算(++,--)
- 后置运算i++;前置运算i++
- 前置++和后置++不同的本质分析
- 运算符前置++和后置++的重载
- ++运算符的重载前置与后置
- 关于运算符 前置 ++ 和后置++ (--)
- 前置与后置运算符的区别
- 前置和后置++运算符的重载
- C++运算符前置++v.s.后置++
- 后置前置++--
- [C++] C++的运算符重载(+、-、前置--、后置--,前置++,后置++、==)
- 对象前置++,前置--;后置++,后置--(没有利用《和》重载运算符)
- [C++] C++的运算符重载(+、-、前置--、后置--,前置++,后置++、==)
- CentOS中配置lvm存储
- 8.4
- Vue 学习笔记
- Wormholes (弗洛伊德 )
- C++编译与链接
- 指针、++、--前置后置不同运算
- UAa11582--Colossal Fibonacci Numbers!(快速幂)
- 1.4 查找最大或最小的 N 个元素
- C_取随机数函数的使用
- android屏幕尺寸详解
- java GUI事件模型的调用流程
- 一只断了翅的蚂蚁
- 8月4日小结
- 理解 Thread.Sleep 函数