为什么范围基本循环不适用于堆中的数组,但适用于堆栈中的数组

why range base loop doesn't work for arrays in heap, but works for the arrays in stack

本文关键字:数组 适用于 范围 堆栈 不适用 为什么 循环      更新时间:2023-10-16

这里我试图为两个整数数组使用c++11范围基循环。一个使用new关键字声明,另一个不使用。

#include <iostream>
#include <stdlib.h>
#define ARRAY_LENGTH 100    
int main()
{
          int* heap_array = new int[ARRAY_LENGTH];
          int stack_aray[ARRAY_LENGTH];
          for(int i=0; i < ARRAY_LENGTH; i++)
          {
            int val = (rand() % ARRAY_LENGTH) + 1;
            heap_array[i] = val;
            stack_array[i] = val;
          }
          for(int& i : stack_array){ std::cout << i << std::endl;}
          for(int& i : *heap_array){ std::cout << i << std::endl;} // compile error
          delete[] heap_array;
          return 0;
}

为什么范围基循环不适用于用new关键字声明的数组?我的观点是堆或堆栈都是heap_array&CCD_ 2是指向第一个元素的指针。

您的heap_array实际上不是一个数组,而是指向int的原始指针。原始指针对所分配的元素数量一无所知。