我们有一个学校项目,任何使用 C 的信息系统。为了保持学生记录的动态大小列表,我选择了链表数据结构。今天早上我的朋友让我看看他的系统。我对他的记录清单感到惊讶:
#include <stdio.h>
/* and the rest of the includes */
/* global unsized array */
int array[];
int main()
{
int n;
for (n=0; n < 5; n ++) {
array[n] = n;
}
for (n=0; n < 5; n ++) {
printf("array[%d] = %d\n", n, array[n]);
}
return 0;
}
与代码一样,他声明了一个对整个程序来说是全局(在 bss 段中)的未调整大小的数组。他能够通过用非零值覆盖后续内存块来向数组添加新条目,这样他就可以遍历数组:
for (n=0; array[n]; n++) {
/* do something */
}
他使用(我也测试过)Turbo C v1。我在 linux 中尝试过,它也可以工作。
由于我以前从未遇到过这种技术,我认为它存在问题。所以,是的,我想知道为什么这是一个坏主意,为什么更喜欢它而不是链表。