std::cout << a[i] << " \n"[i == n - 1];
a[i]
: 这会输出数组a
的第i
个元素。" \n"
: 这是一个包含空格和换行符的字符串字面量。[i == n - 1]
: 这是一个索引操作。当i
等于n - 1
(即i
是数组的最后一个索引)时,它返回字符串中的换行符\n
,否则返回空格。
因此,这行代码的作用是:
- 对于数组
a
的每一个元素(除了最后一个),输出该元素后接一个空格。 - 对于数组
a
的最后一个元素,输出该元素后接一个换行符。
在 C 语言的标准 printf
函数中,不能直接使用 " \n"[i == n - 1]
这种索引操作来根据条件选择输出空格或换行符。printf
函数要求每个格式说明符(例如 %d
、%s
等)后面都跟着一个对应的变量或值,它不支持直接在其格式字符串中进行条件运算。
在 C 语言中,如果你想根据条件来输出不同的字符(如空格或换行符),你需要在 printf
调用之前使用条件语句(如 if
或三元运算符 ?:
)来设置要输出的字符。下面是一个使用三元运算符的示例:
#include <stdio.h>
int main() {
int a[] = {1, 2, 3, 4, 5};
int n = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < n; i++) {
printf("%d%c", a[i], (i == n - 1) ? '\n' : ' ');
}
return 0;
}
在这个示例中,(i == n - 1) ? '\n' : ' '
是一个三元运算符,它检查 i
是否等于 n - 1
(即是否为数组的最后一个元素)。如果是,则表达式的结果为换行符 '\n'
;否则,结果为空格 ' '
。然后,printf
会根据这个结果来输出相应的字符。