【发布时间】:2013-12-16 05:08:58
【问题描述】:
我在课本上找到一段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++ 中允许使用它?
【问题讨论】:
-
你确定这是代码形式的教科书 b/c
ia[10]是未定义的行为,尽管指向一个结束是可以的。 -
@ShafikYaghmour 是的,它来自“c++ prime 3th edition”。
-
我很确定这是有效的 C,但不是 C++。
-
@chris: 似乎是有效的 C++,有关更多信息,请参阅找到的问号。
-
@BenVoigt,我刚刚做到了。有趣的是,虽然从...erm...debates 判断这似乎颇有争议:p