您的位置:首页 > 编程语言 > C语言/C++

一个cout输出引发的问题

2016-12-11 15:11 155 查看
问题描述:

当时是这样的,在一份代码作业中,声明了一个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函数入栈,计算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++遇到的小问题