【问题标题】:c++ interesting syntax for printing new line in std::cout [duplicate]c++ 有趣的语法,用于在 std::cout 中打印新行 [重复]
【发布时间】:2017-05-14 08:31:56
【问题描述】:

以下代码打印出一个由'*' 个字符组成的正方形:

int m = 5; int n=5;
for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
        std::cout << "*" << " \n"[j==5];

输出:

* * * * *
* * * * *
* * * * *
* * * * *
* * * * *

我的问题是关于" \n"[j==5] 部分。 有谁知道这个语法究竟是如何工作的?

【问题讨论】:

  • " \n" 是一个包含 3 个char 的数组,[j==5] 是访问第一个或第二个数组项的索引运算符。
  • 它只是一个由布尔值索引的两个(或更多)字符组成的数组。
  • "\n" 中的三个字符是 { ' ', '\n', '\0' }
  • 永远不应该编写这样的代码。如果它的作用不明显,那就是糟糕的代码。

标签: c++ arrays pointer-arithmetic


【解决方案1】:

" \n" 是 3 个 chars 的数组。您可以将索引与普通数组一样。布尔值隐式转换为整数:false0true1。所以它将使用'\n' 表示j == 5' ' 如果不是,

【讨论】:

  • 我可能真的对某些东西感到困惑......但“\n”不是只有两个字符的数组吗?即:''是第一个字符,'\n'是第二个?
  • @NicoBerrogorry 字符串文字在 C 和 C++ 中总是以 '\0' 结尾
  • 嗯。我的错,我没有想到这一点。也许是因为 std::string 是如何实现的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
相关资源
最近更新 更多