提到指针,真是让人头皮发麻,今天笔者来带你玩转指针。
话不多说先看这道面试题 (注意细节)
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;
}
是不是看着看着就迷糊了,没关系,咱们画图来谈个究竟。

这样一来看起来是不是明显多了,但还是要仔细分析才能保证万无一失。
先进行++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

最后我们运行程序来看看结果

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注html5模板网的更多内容!
浅谈C++ 设计模式的基本原则这篇文章主要介绍了++ 设计模式的基本原则,主要的目标是实现最终目的,高内聚,低耦合,开放封闭原则类的改动
C++基于OpenCV实现手势识别的源码这篇文章主要介绍了C++基于OpenCV手势识别的实现源码,这里用到背景减法模型知识,具体实例代码跟随小编一起看看吧
一篇文章带你入门C++的异常处理C++ 提供了异常机制,让我们能够捕获运行时错误,本文就详细的介绍了C++异常处理入门,具有一定的参考价值,感兴
C++内存模型和名称空间详解这篇文章主要给大家介绍了关于C/C++中的内存模型和名称空间详解,文中通过示例代码介绍的非常详细,对大家学习或
利用c++写一个简单的推箱子小游戏推箱子想必是很多人童年时期的经典游戏,我们依旧能记得抱个老人机娱乐的场景,下面这篇文章主要给大家介绍了关于
C++中char[]能修改char*却不行本文主要介绍了C++中char[]能修改char*却不行,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙