2013-12-16 49 views
1

的我找到一块在教科书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++

+0

你确定这是代码形式教科书B/C'IA [10]'是不确定的行为虽然指向一个过去的结束是确定的。 –

+0

@ShafikYaghmour是的,它来自“C++ primer 3th edition”。 –

+0

我很确定这是有效的C,但不是C++。 – chris

回答

1

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

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

本章第2会给更多的信息:http://pdos.csail.mit.edu/6.828/2012/readings/pointers.pdf

+0

感谢您的亲切解释。 –

+0

没问题。检查我的编辑链接更多信息。 – Gavin