【问题标题】:Why doesn't the for loop increment?为什么 for 循环不增加?
【发布时间】:2019-11-03 16:08:46
【问题描述】:

为什么我的 for 循环不增加?整数“i”不会以某种方式递增,这会导致数组的第一个位置被打印出来。

我执行以下操作:


int* values = new int[10] {};

int& half(int* arr[]){

  //Here, the "i" doesn't increment  

  for(int i = 0; i < 10; i++){
      return *arr[i];
  }
}

int main(){
   int& a = half(&values);
   std::cout << a << std::endl;

   delete[] values;
   return 0;
}

【问题讨论】:

  • 我试图了解您希望这段代码做什么。打印出数组的每个元素?
  • @Kevin 事情是……我的主要目标不同。我知道,对于仅打印数组的每个元素,我可以做非常不同的事情以及非常简短和精确的事情,以实现相同的目标。但我只是想融合我所拥有的一切并以这种方式学习。
  • @OkanGüclü 函数在i为0时返回。C++返回不累加。

标签: c++ arrays stack heap-memory


【解决方案1】:

对于您要执行的操作,您应该将 for 循环中的值添加到数组并返回该列表:

    int newValues[10] = {0};
    for(int i = 0; i < 10; i++){
       newValues[i] = i;
    }
    return newVaules;

【讨论】:

  • 我修复了初始化行。
【解决方案2】:

问题的根源是 return 声明。如果你调用它 - 你的函数将通过传递给返回的值来结束它的工作。 第二件事 - 你正在对指针和引用做一些不必要的工作 - 也许你可能忘记了数组的名称是对其第一个元素的引用。

第三件事:由于引用、指针、引用、数组和函数的使用,但以某种令人困惑的方式——我猜代码是学习这些东西的某种方式——如果是这样,你可以用 cmets 编写 - 你想从你的代码中做什么以及以什么方式? - 所以我或其他用户可以帮助你学习和理解如何以正确的方式做到这一点

【讨论】:

  • 也感谢您的评论。是的,该代码是某种学习方式。我肯定也会考虑你的意见。
【解决方案3】:

return 语句使函数立即以指定的值退出。结果,当你执行语句时

return *arr[i];

在循环内部,函数将停止运行并返回指示值。这意味着循环不能多次执行,因为它会在第一次迭代后停止运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    相关资源
    最近更新 更多