嗯,这段代码是从一个练习考试中获取的一个编程的东西,我很有资格,但我仍然想知道输出背后的原因。
#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,并且那个也困扰我的那个。
答案 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_
以指向g
,cout << *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
提示:调试程序允许您逐行浏览代码并并行监视终端输出。