int length = 5;
int hi[length];
对比
int length = 5;
int *hi = new int[length];
每当您尝试静态分配大小不恒定的数组时,我都被告知编译器会在 C 中抱怨。因此,如果您需要未知大小的数组,则需要动态分配内存。但是,既然有允许第一个示例的编译器,那么它们到底在做什么呢?他们仍然在数据段中,还是不在堆中?如果它们在堆上,那么示例之间有什么区别,为什么我仍然必须在第二个示例中调用 delete[] 而不是第一个示例?