一个cout输出引发的问题
2016-12-11 15:11
155 查看
问题描述:
当时是这样的,在一份代码作业中,声明了一个int返回值函数。函数其中的一个功能是将传进去的一个char数组赋值。当主函数部分直接调用如下:
解决方案:
将两段输出分开:
cout<<Test(a);
cout<<a[0];
错误原因:
我们需要了解 cout 的工作方式,就会发现问题并不复杂:
首先 cout 参数入栈顺序是从右到左。(说到这里大概能明白问题出在哪里了)例如:cout<<a<<b;在栈中位置将是b a <-栈指针,从指针位置开始输出,虽然顺序依旧是ab,但是如果参数是待计算的函数时,cout将函数入栈,然后计算;这就会发生有趣的一幕,因为先入的先计算,即排在输出顺序后面的函数先进行计算。例如:cout<<G(a)<<G(b);
将先计算G(b)。所以此前的代码先将此时的a[0]入栈,然后再到Test函数入栈,计算。
当时是这样的,在一份代码作业中,声明了一个int返回值函数。函数其中的一个功能是将传进去的一个char数组赋值。当主函数部分直接调用如下:
#include<iostream> using namespace std; int Test(char a[]); //返回一个int型,并给数组赋值 int main(){ char a[2]; cout<<Test(a)<<a[0]; }输出的Test(a)没有问题,a[0]却总是?,检查函数并没有错误,char数组确实应该被赋值了。
解决方案:
将两段输出分开:
cout<<Test(a);
cout<<a[0];
错误原因:
我们需要了解 cout 的工作方式,就会发现问题并不复杂:
首先 cout 参数入栈顺序是从右到左。(说到这里大概能明白问题出在哪里了)例如:cout<<a<<b;在栈中位置将是b a <-栈指针,从指针位置开始输出,虽然顺序依旧是ab,但是如果参数是待计算的函数时,cout将函数入栈,然后计算;这就会发生有趣的一幕,因为先入的先计算,即排在输出顺序后面的函数先进行计算。例如:cout<<G(a)<<G(b);
将先计算G(b)。所以此前的代码先将此时的a[0]入栈,然后再到Test函数入栈,计算。
相关文章推荐
- 一个输出内容不同引发的问题
- getYear引发的一个小问题
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 一个VS.net自动生成代码引发的问题
- 安装SQL Server2K可能引发一个严重问题
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 安装SQL Server2K可能引发一个严重问题
- printf、cout 取值输出问题,(从右向左求值,从左向右输出??)??
- 一个私有的PageLoad在Mono下引发的问题
- 一个php版本引发的问题
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 一个游戏引发的思考(概率问题)
- 一个游戏引发的思考(概率问题)
- 又一个升级补丁引发的 arcgisserver cache 问题
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 安装SQL Server2K可能引发一个严重问题