谁能解释一下下面代码的输出
char* a[] = {"ABC123", "DEF456", "GHI789"};
char **p = a;
cout<<++*p<<std::endl;
cout<<*p++<<std::endl;
cout<<++*p<<std::endl;
输出:
BC123
BC123
EF456
令我困惑的是++*p 和 *p++ 的不同行为。我期待的输出是:
ABC123
DEF456
GHI789
最佳答案
也许这会有所帮助。你的例子大致等同于:
++(*p);
cout << *p << '\n';
cout << *p << '\n';
++p;
++(*p);
cout << *p << '\n';
没有括号,*p++
被解析为*(p++)
,因为后缀增量比解引用运算符具有更高的优先级。不过,增量仍然在整个表达式之后完成。
另一方面,前缀增量和 * 具有相同的优先级,因此 ++*p
被从右到左解析为 ++(*p)
.知道前缀增量必须在表达式之前完成,您现在可以将整个图片放在一起。
关于c++ - 指向指针算术的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9359485/