【问题标题】:About bound of array [duplicate]关于数组的界限[重复]
【发布时间】: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]超出了边界。 为什么在 CC++ 中允许使用它?

【问题讨论】:

  • 你确定这是代码形式的教科书 b/c ia[10] 是未定义的行为,尽管指向一个结束是可以的。
  • @ShafikYaghmour 是的,它来自“c++ prime 3th edition”。
  • 我很确定这是有效的 C,但不是 C++。
  • @chris: 似乎是有效的 C++,有关更多信息,请参阅找到的问号。
  • @BenVoigt,我刚刚做到了。有趣的是,虽然从...erm...debates 判断这似乎颇有争议:p

标签: c++ arrays


【解决方案1】:

end 指向紧接在 ia 的 10 个元素之后的地址。然后,while 循环将查看 ptr 何时到达数组 ia 之后的地址,从而终止循环。这样就不会尝试输出超出初始 ia 数组的任何值。

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

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

【讨论】:

  • 感谢您的友好解释。
  • 没问题。检查我的编辑以获取更多信息的链接。
猜你喜欢
  • 1970-01-01
  • 2014-11-16
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多