报错代码如下:
#include <iostream>
using namespace std;
int main(){
int *p = new int[10];
for(auto i : p){
cout << i << " ";
}
return 0;
}
原因分析:
虽然我么通常称new T[]分配的内存为“动态数组”,但是这种叫法某种程度上有些错误。使用new分配一个数组时,并未得到一个数组类型的对象,而是得到一个数组元素类型的指针。由于分配的内存并不是一个数组类型,因此不能对数组调用begin或者end。出于同样的原因,也不能使用范围for语句来处理(所谓的)动态数组中的元素。
可以使用指针进行操作,例如:
for(int *q = p; q != p + 10; ++q){
*q = 10;
}