C ++代码:
#include<iostream>
using namespace std;
int main()
{
int N;
cin>>N;
int *A = new int[N];
int i=0;
for(i=0;i<N;i++)
cin>>A[i];
while(cout<<A[--N]<<' ' and N);
delete[] A;
return 0;
}
以相反的顺序将数组的整数打印在由空格分隔的单行中。 有谁知道什么是&#34;和N&#34;在cout声明中做什么?
答案 0 :(得分:2)
这是一种神秘的写作方式:
while( (cout<<A[--N]<<' ') and (N != 0) );
// output is successful and N is not equal to zero.
可以更清楚地写成:
for ( ; N != 0; --N)
{
cout << A[N-1] << ' ';
}
由于理论上N
可能是否定的,因此最好使用:
for ( ; N > 0; --N)
{
cout << A[N-1] << ' ';
}
答案 1 :(得分:1)
N
是一个整数变量,类型int
的值可以隐式转换为bool
(非零变为true
,零变为false
)。因此,当转换为operator<<
的{{1}}的结果为真时,表达式基本上是sa执行且 bool
不等于零。逻辑上这段代码
N
等于:
while(cout<<A[--N]<<' ' and N);
由于短路,实际代码略有不同,但在这种情况下差异并不重要。
答案 2 :(得分:1)
部分and N
也可以像while语句的&& N
一样编写
while(cout<<A[--N]<<' ' and N);
已经指出可以像
一样重写while(cout<<A[--N]<<' ' && N != 0);
检查循环的每次迭代中正在减少的N
(A[--N]
)是否不等于0.
因此循环以相反的顺序输出数组okf。
单词and
是主令牌&&
的所谓替代令牌。
答案 3 :(得分:0)
这只是一些程序员编写代码的方法。 它实际上写成
while( (cout<<A[--N]<<' ') and (N != 0) );
基本上&#39;和&#39;当两个操作数都是非零值时,operator返回true。 所以cout会给出它打印的字符数,在这种情况下它们将不为零,直到N的值变为零,你的循环才会被执行。