cout << *p << " " << *p++ << endl;
怎么会这样?
#include "stdafx.h"#include<stdio.h>#include <iostream>using namespace std;int main (){ char *p = "Hello"; cout << *p << " " << *p++ << endl; // e H char *t = "Hello"; cout << *t++ << " " << *t << endl; // H e return 0;}/*入栈顺序e h: h, " ", eh e: e, " ", h参考vc汇编,这样解释不知道妥不妥*/char *p = "Hello";cout << *p << " " << *p++ << endl; // e H/*从右往左看,先获取p指向的值('H'),由于接下来p要改变,因此先把该值存起来,即把*p的值先存起来,假设放在A处,接下来就是p++计算。由于后面p的值不在改变,通过p可方便的找到p指向的值('e'),因此这个值不在保存。因此最终的入栈顺序是 'H'(在A处), " ", 'e'(通过p获取),输出结果就是 e H*/char *t = "Hello";cout << *t++ << " " << *t << endl; // H e/*同样从右往左看,先获取t指向的值('H')。接下来计算*t++,由于后面计算完t++后,t会改变,因此*t++的值需要保存,同样,假设保存在B处,最后入栈的顺序是 'e'(通过t获取), " ", 'H'(从B处取得),输出结果就是 H e*///最后,为了验证我们说的是对的,可以修改下程序char *t = "Hello";cout << *t++ << " " << *t << " " << *t++ << " " << endl; // e l Hchar *p = "Hello";cout << *p << " " << *p++ << " " << *p++ << " " << endl; // l e H/*总结:cout输出,遇到*p++的情况,会把值先保存,否则不保存(结合vc asm查看得出结论,不适合其他编译器,同样,不知道c++标准是否这样规定)*/