char* a[] = {"ABC123", "DEF456", "GHI789"};
char **p = a;
cout<<++*p<<std::endl; // 1
cout<<*p++<<std::endl; // 2
cout<<++*p<<std::endl; // 3
1行目では、最初*p
に配列内の要素を指し、 1つ前方"ABC123"
に++
移動するため、「BC123」が出力されます。
2行目*p
はまだポイントしてBC123
いるので、これが印刷され、印刷される++
と実行されます。これにより、ポインタが配列の2番目の要素に移動します
3行目は1行目と同じです。p
(配列の2番目の要素)の内容を取得し、その文字列内の1文字を移動して、印刷します。EF456
(文字列型配列のポインター演算もここで見てください。C++はこれをどのように処理しますか?何が起こっているのかを理解するのに役立つと思います)
期待どおりに印刷するには、次のように機能します。
cout<<*p++<<std::endl;
cout<<*p++<<std::endl;
cout<<*p++<<std::endl;
または
cout<<*p<<std::endl;
cout<<*(++p)<<std::endl;
cout<<*(++p)<<std::endl;
または他のさまざまな方法(他の人が言っているように優先順位を考慮に入れる)