用指针预测输出

Predict the output with pointers

本文关键字:输出 指针      更新时间:2023-10-16

在下面的代码中,我对3行的工作感到困惑。如果有人解释,我将不胜感激。非常感谢。

#include< iostream >
using namespace std;
int main()
{
1. char s[]="abcdef";
2. char *p=s;
3. *p++=*++p;
4. cout<<s;
5. return 0;
}

在行*p++=*++p;之前,p指向数组s的开头。

线右侧的++p将使p增加一,因此它现在指向b。用*对其进行去引用将给出值b,因此右手边的求值为b

在左手边,由于使用了后增量运算符,p的值不会立即改变。因此,来自RHS的值b将被设置到相同的存储器位置。由于后增量运算符,p将指向数组的字符c

因此,在这一行之后,字符阵列将保持不变,因此将打印abcdef。然而CCD_ 15将指向数组的字符CCD_。

请注意,以上内容仅在c++17之后有效。从en.cppreference.com/w/cpp/language/eval_order:在每个简单赋值表达式E1=E2和每个复合赋值表达式E1@=E2中,E2的每个值计算和副作用都在E1的每个值运算和副作用之前排序