c语言 - 测试"if (i && (i- 1))"是什么意思?



我不明白这行代码:

if (i && (i - 1))
printf("%dn", 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("%dn", p[i - 1]);
}
return 0; 
}

这个 if 语句的条件

if (i && (i - 1))

为了清楚起见,可以重写,例如

if (i != 0 && (i - 1) != 0)

在条件中,检查索引 i 的当前值是否等于 0。如果它不等于 0,则索引 i - 1 的前一个值是否等于 0。

当 i 不等于 0 且不等于 1 时,此值计算为 true。

因此,从索引 i 等于 2 开始,条件的计算结果为 true。

因此,循环输出数组的所有元素,除了第一个元素和最后一个元素。

通常,在 C 中,不为 0 的值将被评估为true,而零将被评估为false

这一行:

if (i && (i - 1))
printf("%dn", p[i - 1]);

基本上检查ii-1的值是否与0不同。 这意味着数组中的前 2 个元素不会被打印,因为对于i=0,我们将得到i哪个是false,对于i=1,我们将得到(i-1)哪个是false

所以这段代码的结果应该是打印4, -7, 2, 8, 0

如果i != 0i - 1 != 0则打印pi - 1元素。这i != 0检查需要,否则在第一次迭代时,它将0 - 1 = -1为无效的索引。

if (i && (i - 1))基本上是if (i != 0 && i != 1)

条件语句(i && (i - 1)只不过是i!=0 && i != 1

简而言之,在迭代中跳过 0 和 1,并打印从 1 到 5 的元素

循环归结为这个,

for (i = 1; i < 6; i++) {
printf("%dn", p[i]);
}

最新更新