【发布时间】:2015-12-13 18:21:31
【问题描述】:
我正在尝试阅读一些 C。有一个带有条件的 for 循环似乎不是条件。在 for 循环for (h = n; h /= 2;) 中,条件为h/=2;。但这不是一个真实或虚假的陈述。这是什么意思?这个for循环什么时候结束?
这是来自http://rosettacode.org/wiki/Sorting_algorithms/Shell_sort#C的完整代码:
#include <stdio.h>
void shell_sort (int *a, int n) {
int h, i, j, t;
for (h = n; h /= 2;) {
for (i = h; i < n; i++) {
t = a[i];
for (j = i; j >= h && t < a[j - h]; j -= h) {
a[j] = a[j - h];
}
a[j] = t;
}
}
}
int main (int ac, char **av) {
int a[] = {4, 65, 2, -31, 0, 99, 2, 83, 782, 1};
int n = sizeof a / sizeof a[0];
int i;
for (i = 0; i < n; i++)
printf("%d%s", a[i], i == n - 1 ? "\n" : " ");
shell_sort(a, n);
for (i = 0; i < n; i++)
printf("%d%s", a[i], i == n - 1 ? "\n" : " ");
return 0;
}
【问题讨论】:
-
在表达式之后想象
!= 0 -
C 没有强布尔数据类型。在 C99 及更高版本中有
_Bool,但即使这只是一个整数类型。在 C 中,任何计算结果为零的整数表达式都表示假,而任何其他整数表达式都表示真。反过来说,关系表达式的计算结果为整数值(0 或 1,视情况而定),并且可以这样使用。
标签: c for-loop conditional conditional-statements