c中的指针,双指针和三指针

时间:2012-09-01 06:46:59

标签: c++ pointers

  

可能重复:
  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;
 }

我试图理解指针,双指针和三指针的概念。可以请有人告诉我这段代码是如何工作的以及解决方案背后的概念?提前完成。

1 个答案:

答案 0 :(得分:2)

单指针是指向特定数据类型的内存位置的数据类型。在这种情况下,它是char,所以我们假设它是一个char指针,它只能指向一个char变量,是,它只能保存字符变量的地址。 双指针可以保存单个指针的地址,而三指针可以保存双指针的地址。

在你的代码中,第一个指针'c'是一个双指针,它本身保存了cstrings。 cstrings是单个char指针。那么'cp'和'cpp'都是三指针。

至于其余的代码,它很混乱,看起来像一场噩梦。您最好阅读有关指针和基本C ++编程的一些资源。我推荐斯坦福大学的Eric Roberts先生用c ++编写抽象编程。 另请参阅smart pointers