可能重复:
Can someone tell me the flow of references in the second printf statement in the given code?
#include<iostream>
using namespace std;
char *c[] = {"ENTNG","NST","AMAZI","FIRBE"};
char **cp[] = {c+3,c+2,c+1,c};
char ***cpp = cp;
int main(){
cout<<(**++cpp);
cout<<(*--*++cpp+3);
cout<<(*cpp[-2]+3);
cout<<(cpp[-1][-1]+1);
return 0;
}
我试图理解指针,双指针和三指针的概念。可以请有人告诉我这段代码是如何工作的以及解决方案背后的概念?提前完成。
答案 0 :(得分:2)
单指针是指向特定数据类型的内存位置的数据类型。在这种情况下,它是char,所以我们假设它是一个char指针,它只能指向一个char变量,是,它只能保存字符变量的地址。 双指针可以保存单个指针的地址,而三指针可以保存双指针的地址。
在你的代码中,第一个指针'c'是一个双指针,它本身保存了cstrings。 cstrings是单个char指针。那么'cp'和'cpp'都是三指针。
至于其余的代码,它很混乱,看起来像一场噩梦。您最好阅读有关指针和基本C ++编程的一些资源。我推荐斯坦福大学的Eric Roberts先生用c ++编写抽象编程。 另请参阅smart pointers。