【发布时间】:2010-02-15 23:35:35
【问题描述】:
我在 Mac 上有一个用 ANSI C 编写的命令行实用程序,它具有为单链表创建冒泡排序数组的功能。我声明了循环变量。
int a = 0;
int b = 0;
我以缩写样式为循环编写了冒泡排序(即,将变量初始化留空)。
for ( ; a < size; a++)
for( ; b < size; b++)
这在退出前只执行了一次。先前使用 i 变量填充数组的 for 循环以相同的方式编写并按预期执行。冒泡排序循环的修复方法是将 a = 0 和 b = 0 放回原处。缩写的 for 循环无法执行是否有原因?
【问题讨论】:
-
你真的需要循环体之外的 a 和 b 吗?如果没有,它们应该在其中声明。在循环外声明它们意味着它们是在循环外使用的,这意味着在循环执行时它们可能不会像您预期的那样为零。
-
这是 ANSI C。如果变量在内部声明(即,在 C99 模式外使用的“for”循环初始声明),编译器会抛出警告。
-
为了将来参考,如果您一次跟踪代码的执行,这种初学者的错误会立即变得清晰。您可以在调试器中或手动执行此操作。它确实会帮助您更快、更深入地学习。