我一直在读K R关于C的书,发现C中的指针算法允许访问超出数组末尾的一个元素.我知道C允许用记忆做几乎任何事情,但我只是不明白,这种特性的目的是什么? C不允许访问超出数组末尾的
这样就可以了:
char array[N]; char *p; char *end; for (p = array, end = array + N; p < end; ++p) do_something(p);
(做*结束将是一个错误.)
这显示了此功能有用的原因:在数组结束后指向(不存在的)元素的指针对于比较(例如循环)非常有用.
从技术上讲,这就是C标准允许的一切.但是,实际上,C实现(编译器和运行时)不会检查是否访问超出数组末尾的内存,无论它是一个元素还是更多元素.必须有边界检查,这将减慢程序执行速度.最适合(系统编程,通用库)的程序C类型的速度往往比安全和安全边界检查所带来的更多.
这意味着C可能不是通用应用程序编程的好工具.