访问元素超出C中数组的末尾
发布时间:2020-12-16 09:13:35 所属栏目:百科 来源:网络整理
导读:我一直在读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可能不是通用应用程序编程的好工具. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |