我不明白这段代码的最后一个输出

时间:2012-03-06 03:07:07

标签: c++

嗯,这段代码是从一个练习考试中获取的一个编程的东西,我很有资格,但我仍然想知道输出背后的原因。

    #include <iostream>
    using namespace std;

    int main(){

    char g = 'X', t = '1', *k_ = &t;

    g = 'y';
    cout << *k_ << *k_ << endl;
    g = 'Y';
    cout << *k_;
    k_ = &g;
    t = 'Z';
    cout << *k_ << *k_ << *k_ << endl;

    return 0;

    }

我不明白为什么如果只有三个k_指针,最后一个cout的输出是1YYY,并且那个也困扰我的那个。

6 个答案:

答案 0 :(得分:4)

之前的cout没有新的线路输出。那个打印出k_指向的'1'。

答案 1 :(得分:3)

1. cout << *k_;
2. k_ = &g;
3. t = 'Z';
4. cout << *k_ << *k_ << *k_ << endl;

第1行末尾或之后没有endl。所以你看到的1来自该行。

答案 2 :(得分:2)

旧版*k_(1)的一个输出没有换行符,然后在k_设置为&g之后有三个(现在&#39; Y&# 39。)

答案 3 :(得分:2)

不仅 last cout有助于输出1YYY,它也是之前的那个:

cout << *k_; 输出1,然后在k_ = &g; 之后设置k_以指向gcout << *k_ << *k_ << *k_ << endl;输出YYY

每个cout 默认情况下不会断行,这是我认为你一直在想的。您需要明确传递endl"\n"以打破一行。

答案 4 :(得分:2)

#include <iostream>
using namespace std;

int main(){

char g = 'X', t = '1', *k_ = &t;

g = 'y';
cout << *k_ << *k_ << endl; // prints out 11 with a newline
g = 'Y';
cout << *k_; // prints out 1 without a newline, so next cout will be on the same line
k_ = &g; // k_ now holds g's address (remember g is now 'Y')
t = 'Z';
cout << *k_ << *k_ << *k_ << endl; // prints out YYY on the same line as 1 from above

return 0;

}

答案 5 :(得分:1)

你的错误:你想到了';'在cout指令的最后作为换行符。请注意,未经模糊处理的代码最终等同于:

    cout << '1' << '1' << endl << '1' << 'Y' << 'Y' << 'Y' << endl;

或忽略噪声以伪输出结束:

    1 1 endl 1 Y Y Y endl

并打印在终端设备中(将光标移动到endl):

11
1YYY

提示:调试程序允许您逐行浏览代码并并行监视终端输出。