0

重複の可能性:
指定されたコードの 2 番目の 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' は、それ自体に cstring を保持する二重ポインターです。cstrings は単一の char ポインターです。'cp' と 'cpp' は両方ともトリプル ポインターです。

コードの残りの部分に関しては、かなりめちゃくちゃで、悪夢のように見えます。ポインターと基本的な C++ プログラミングに関するリソースを読んだほうがよいでしょう。スタンフォードのエリック・ロバーツ卿による C++ でのプログラミングの抽象化をお勧めします。スマート ポインターも参照してください。

于 2012-09-01T06:49:29.050 に答える