一道面试题教你轻松玩转C++指针
目录
- 第一次打印
- 第二次打印
- 第三次打印
- 第四次打印
- 总结
话不多说先看这道面试题 (注意细节)
int main(){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); return 0; }
是不是看着看着就迷糊了,没关系,咱们画图来谈个究竟。
文章图片
【一道面试题教你轻松玩转C++指针】 这样一来看起来是不是明显多了,但还是要仔细分析才能保证万无一失。
第一次打印 先进行++p再进行两次解引用.见下图可知我们打印 POINT
文章图片
第二次打印 先进行 ++CPP然后解引用再进行 -- 操作将C+1改变为C接着再一次解引用 最后+3
我们这里打印结果是 ER
文章图片
第三次打印 我们先进行CPP[-2]的操作,即相当于 *(CPP-2)但也要注意这里我们CPP的值并未发生改变
在这里我们(CPP-2)的指向用黑线表示,然后再一次解引用,最后+3,此时指向了图中ST
所以我们这里打印ST
文章图片
第四次打印 CPP[-1]即 *(CPP-1) 这里的CPP[-1][-1] 即相当于*( *(CPP-1)-1 ) 最后+1指向EW
文章图片
最后我们运行程序来看看结果
文章图片
总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 杜月笙的口才
- Linux下面如何查看tomcat已经使用多少线程
- 皮夹克
- 解读《摩根集团》(1)
- 绘本与写作
- 蓝桥杯试题
- 麦田社群
- 面对苦难——如何化解
- 葱爷说股20190107