我不明白这行代码:
if (i && (i - 1)) printf("%d\n", p[i - 1]);
int main(void) {
int p[7] = {-5, 1, 4, -7, 2, 8, 0};
int i;
for (i = 0; i < 7; i++) {
if (i && (i - 1))
printf("%d\n", p[i - 1]);
}
return 0;
}
答案 0 :(得分:4)
此if语句的条件
if (i && (i - 1))
为了清晰起见,可以被重写
if (i != 0 && (i - 1) != 0)
在这种情况下,将检查索引i的当前值是否等于0。如果不等于0,则索引i-1的先前值是否等于0。
当i不等于0且不等于1时,此值为true。
因此,条件从索引i等于2开始计算为true。
因此循环将输出数组中除第一个元素和最后一个元素以外的所有元素。
答案 1 :(得分:2)
如果i != 0
和i - 1 != 0
然后打印i - 1
的{{1}}元素。此p
检查需要,因为否则在第一次迭代时,i != 0
作为索引无效。
答案 2 :(得分:2)
通常,在C中,非0的值将被评估为true
,而零将被评估为false
。
此行:
if (i && (i - 1))
printf("%d\n", p[i - 1]);
基本上检查i
和i-1
的值是否与0
不同。意思是,不会打印数组中的前两个元素,因为对于i=0
,我们将得到i
,即false
;对于i=1
,我们将得到得到(i-1)
,即false
因此,此代码的结果应为打印4, -7, 2, 8, 0
答案 3 :(得分:1)
if (i && (i - 1))
基本上是if (i != 0 && i != 1)
。
答案 4 :(得分:-1)
条件语句(i && (i - 1)
只不过是i!=0 && i != 1
简而言之,在迭代中跳过0和1并打印从1到5的元素
循环归结为这一点,
for (i = 1; i < 6; i++) {
printf("%d\n", p[i]);
}