【发布时间】: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