c++ - 关于数组的边界

标签 c++ arrays

<分区>

我在教科书上找到了一段C++代码,有一些疑问:

int ia[10]; // an integer array with 10 elements
int *ptr = ia; //the address of the first element in array. 
int *end = &ia[10]; //
while ( ptr != end ){
    std::cout<<*(ptr++)<<" ";
}
std::cout<<std::endl;

因为,这个数组的边界是从0到9,也就是说ia[10]是越界的。 为什么在 CC++ 中允许使用它?

最佳答案

end 指向 ia 的 10 个元素之后的地址。 while 循环然后查看 ptr(沿着数组步进的指针)何时到达数组 ia 之后的地址,因此循环终止。通过这种方式,不会尝试输出超出初始 ia 数组的任何值。

关键是 C 使用对内存位置的引用。

第 2 章将提供更多信息:http://pdos.csail.mit.edu/6.828/2012/readings/pointers.pdf

关于c++ - 关于数组的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20603864/

相关文章:

c++ - OpenCV 多相机处理问题

java - 如何制作随机数模式生成器?

python - 提高数组操作的性能

java - 在 Java8 中连接对象数组列表

java - 创建子数组时出错

c++ - 如何使用 Boost Spirit 提取修剪后的文本?

c++ - 如何将 CString 转换为整数和 float ?

c++ - 在 C++11 中,可以在同一行声明全局变量和函数原型(prototype)吗?

c++ - 将atomic<>定义为函数内的静态变量

vb.net - 如何判断某个项目是否不在数组中