测试“if (i && (i- 1))”是什么意思?
What does the test “if (i && (i- 1))” mean?
我不明白这行代码:
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;
}
If i != 0
AND i - 1 != 0
THEN 打印 p
的 i - 1
元素。此 i != 0
检查需要,否则在第一次迭代时它将 0 - 1 = -1
作为无效的索引。
if (i && (i - 1))
基本上是 if (i != 0 && i != 1)
.
这个if语句的条件
if (i && (i - 1))
为了清楚起见,可以像
那样重写
if (i != 0 && (i - 1) != 0)
在条件中检查索引i的当前值是否等于0。如果不等于0则索引i-1的前值是否等于0。
当 i 不等于 0 且不等于 1 时,此计算结果为真。
因此条件从等于 2 的索引 i 开始计算为真。
因此循环输出数组中除第一个元素和最后一个元素之外的所有元素。
通常,在 C 中,非 0 的值将被计算为 true
,而零将被计算为 false
。
这一行:
if (i && (i - 1))
printf("%d\n", p[i - 1]);
基本上检查i
和i-1
的值是否与0
不同。其含义是数组中的前 2 个元素不会被打印,因为对于 i=0
我们将得到 i
即 false
而对于 i=1
我们将得到 (i-1)
即 false
所以这段代码的结果应该是打印 4, -7, 2, 8, 0
条件语句(i && (i - 1)
不过是i!=0 && i != 1
简而言之,在迭代中跳过 0 和 1,并打印从 1 到 5 的元素
循环归结为这个,
for (i = 1; i < 6; i++) {
printf("%d\n", p[i]);
}
我不明白这行代码:
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;
}
If i != 0
AND i - 1 != 0
THEN 打印 p
的 i - 1
元素。此 i != 0
检查需要,否则在第一次迭代时它将 0 - 1 = -1
作为无效的索引。
if (i && (i - 1))
基本上是 if (i != 0 && i != 1)
.
这个if语句的条件
if (i && (i - 1))
为了清楚起见,可以像
那样重写if (i != 0 && (i - 1) != 0)
在条件中检查索引i的当前值是否等于0。如果不等于0则索引i-1的前值是否等于0。
当 i 不等于 0 且不等于 1 时,此计算结果为真。
因此条件从等于 2 的索引 i 开始计算为真。
因此循环输出数组中除第一个元素和最后一个元素之外的所有元素。
通常,在 C 中,非 0 的值将被计算为 true
,而零将被计算为 false
。
这一行:
if (i && (i - 1))
printf("%d\n", p[i - 1]);
基本上检查i
和i-1
的值是否与0
不同。其含义是数组中的前 2 个元素不会被打印,因为对于 i=0
我们将得到 i
即 false
而对于 i=1
我们将得到 (i-1)
即 false
所以这段代码的结果应该是打印 4, -7, 2, 8, 0
条件语句(i && (i - 1)
不过是i!=0 && i != 1
简而言之,在迭代中跳过 0 和 1,并打印从 1 到 5 的元素
循环归结为这个,
for (i = 1; i < 6; i++) {
printf("%d\n", p[i]);
}