首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

cout << *p << " " << *p++ << endl;解决方案

2012-03-24 
cout *p *p++ endl怎么会这样?C/C++ code#include stdafx.h#includestdio.h#include

cout << *p << " " << *p++ << endl;
怎么会这样?

C/C++ code
#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;}


[解决办法]
C/C++ code
/*入栈顺序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++标准是否这样规定)*/ 

热点排行