关于数组的界限

时间:2013-12-16 05:08:59

标签: 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]超出了边界。 为什么在 C C ++ 中允许它?

1 个答案:

答案 0 :(得分:1)

end指向ia的10个元素后面的地址。然后while循环查看ptr,它是一个沿着数组步进的指针,在数组ia之后立即到达地址,因此循环终止。这样就不会尝试输出超出初始ia数组的任何值。

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

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