69,371
社区成员
发帖
与我相关
我的任务
分享
#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, " ", e
h 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 H
char *p = "Hello";
cout << *p << " " << *p++ << " " << *p++ << " " << endl; // l e H
/*总结:cout输出,遇到*p++的情况,会把值先保存,否则不保存
(结合vc asm查看得出结论,不适合其他编译器,同样,不知道c++标准是否这样规定)*/
入栈顺序
e h: h, " ", e
h 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++ << " " << *t++ << endl; // e l H
char *p = "Hello";
cout << *p << " " << *p++ << " " << *p++ << " " << *p++ << endl; // l e H
总结:cout输出,遇到*p++的情况,会把值先保存,否则不保存
(结合vc asm查看得出结论,不适合其他编译器,同样,不知道c++标准是否这样规定)