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

奇葩的输出有关问题

2013-03-22 
奇葩的输出问题char**BookAuthorNamenew char*[2]BookAuthorName[0]new char [15]BookAuthorName[1]n

奇葩的输出问题
char**BookAuthorName=new char*[2];
BookAuthorName[0]=new char [15];
BookAuthorName[1]=new char [15];
int j=0;
cin>>BookAuthorName[j++]>>BookAuthorName[j++];cout<<endl;
cout<<j-2<<j-1<<endl;
cout<<BookAuthorName[j-2]<<" "<<BookAuthorName[j-1]<<endl;
输入hello world
输出结果是
01
world hello
然后
char**BookAuthorName=new char*[2];
BookAuthorName[0]=new char [15];
BookAuthorName[1]=new char [15];
cin>>BookAuthorName[0]>>BookAuthorName[1];cout<<endl;
cout<<BookAuthorName[0]<<" "<<BookAuthorName[1]<<endl;
输入hello world
输出结果是
hello world,
实在不懂,明明第一个和第二个输出不是应该一样吗

然后我改成
cin>>BookAuthorName[j++]>>BookAuthorName[j];cout<<endl;
cout<<BookAuthorName[0]<<" "<<BookAuthorName[1]<<endl;
输出的就是hello world
再改成
cin>>BookAuthorName[j++]>>BookAuthorName[j++];cout<<endl;
cout<<BookAuthorName[0]<<" "<<BookAuthorName[1]<<endl;
输出的又是world hello
太奇怪了
[解决办法]
cin>>BookAuthorName[j++]>>BookAuthorName[j++];
这一句 换一个方式看 
oper(oper(cin, BookAuthorName[j++]),BookAuthorName[j++]);
调用函数 oper 的时候 两个参数
oper(cin, BookAuthorName[j++])
BookAuthorName[j++]
哪一个先求值[先进行运算]是不确定 ++的副作用什么时候完成也是不确定的
这个做法属于未定义行为

你这里得出这样的结果的原因是 右边的参数先求值
于是 对参数BookAuthorName[j++]赋值的时候 j的值是0 
对BookAuthorName[j++]赋值的时候 j的值是1
代码变成cin>>BookAuthorName[1]>>BookAuthorName[0];
........所以你看到了诡异的结果 

[解决办法]
看顶置的帖子
看懂了你就懂了.

热点排行