当前位置 : 主页 > 编程语言 > c++ >

访问元素超出C中数组的末尾

来源:互联网 收集:自由互联 发布时间:2021-06-23
我一直在读K R关于C的书,发现C中的指针算法允许访问超出数组末尾的一个元素.我知道C允许用记忆做几乎任何事情,但我只是不明白,这种特性的目的是什么? C不允许访问超出数组末尾的
我一直在读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可能不是通用应用程序编程的好工具.

网友评论