0

可能重复:
有人可以告诉我给定代码中第二个 printf 语句中的引用流吗?

 #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;
 }

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

4

1 回答 1

2

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

在您的代码中,第一个指针“c”是一个双指针,它本身包含 cstrings。cstrings 是单字符指针。那么'cp'和'cpp'都是三重指针。

至于其余的代码,它非常混乱,看起来就像一场噩梦。您最好阅读一些关于指针和基本 C++ 编程的资源。我会推荐斯坦福的 Eric Roberts 爵士用 C++ 编写的编程抽象。另请参阅智能指针

于 2012-09-01T06:49:29.050 回答