c++ - 指向指针算术的指针

标签 c++ pointer-arithmetic

谁能解释一下下面代码的输出

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/

相关文章:

c - 海湾合作委员会警告 : pointer arithmetic with type void *

c++ - 释放从 placement new 分配的内存

c++ - 系统缓存与无缓存

c++ - 为什么派生类必须重新定义重写的基类方法

c++ - C 中正确的指针算法

c - 动态分配的堆栈和指针运算出现奇怪的内存错误

c - C 中的指针、文件和内存管理

c++ - 是否可以使用非常量键类型的 unordered_map?

c++ - 用c++编写电源模块代码,收到几个错误

c - 在整数数组的情况下,指针减法究竟是如何工作的?