【问题标题】:iterate through array elements using its own pointer使用自己的指针遍历数组元素
【发布时间】:2017-07-03 11:57:18
【问题描述】:
int* arr = new int[30](); //30 is random serving the example's purposes

while(<insert check here that uses the arr pointer>){

   cout<<*arr<<endl;

   arr++;
}

这是我尝试使用指针的技巧,我今天已经为此工作了一段时间。我在 while 子句中使用了许多不同的检查,但从未正确完成(主要以无限循环或段错误结束)。 所以我的问题可以这样做还是标准的for循环方法是唯一的方法?

【问题讨论】:

  • 请注意,通过递增arr(您拥有的唯一指向该内存分配的指针),您将失去delete[] 的能力,而无需付出极大的努力。在开始递增之前制作一个副本。

标签: c++ arrays pointers while-loop


【解决方案1】:

嗯,有很多方法可以做到这一点。

添加

int *end = arr + 30;
while (arr < end)

当然,通过增加“arr”,你会丢失指向数组的指针 - 但你已经知道了:-)

【讨论】:

  • 我想当我增加 arr 时,我只是移动到数组的下一个元素......为什么我会丢失指针?其次,您的回答很好,但我尝试在不使用数组大小​​的情况下仅通过单独检查指针来进行检查
  • C++ 不跟踪数组的大小 - 因此您需要手动执行此操作。
  • 那么没有什么东西表明指针到达了数组的末尾?类似于字符串中的空终止。
  • 使用 std::vector 代替原始数组 - 现在它会为您跟踪它。
  • 未定义。访问 arr[30] 可能会给您一个段错误(终止程序),或者可能返回值 0 或其他一些随机值。事实上,给定“a=new int[10]; b=new int[10]”,“a[15]”可能引用了 b 的一部分——当然你不能以任何方式依赖它。添加 "printf("arr is %p\n", arr);" 可能是有益的在你的循环内,就在循环开始之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 2012-11-06
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
相关资源
最近更新 更多