奇葩的输出问题
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];
........所以你看到了诡异的结果
[解决办法]
看顶置的帖子
看懂了你就懂了.