【发布时间】:2019-09-17 17:46:17
【问题描述】:
我有一个类似数组的声明
int a1[5];
如果我这样声明这个数组:
int *a2;
a2 = malloc(sizeof(int)*5);
然后像我使用数组a1那样使用它有什么区别。此外,如果这是在函数中完成的并且函数结束 a1 和 a2 超出范围。在 a1 的情况下,内存会自动释放,但在 a2 的情况下,它是自动完成的,还是我们必须使用 delete 释放它?
【问题讨论】:
-
数组不是指针。指针不是数组。您不能将一个声明为另一个。你可以有一个指向数组的指针,但这与声明它们中的任何一个都没有关系。
-
感谢您的评论。作为 2 个比较声明的最终结果,内存映射有什么不同?如果我错了,请纠正我,但我的印象是这两种类型的声明都会导致 5 个 *sizeof(int) 存储位置的连续内存空间。因此问题是有什么区别?
-
第二个片段唯一声明的是一个指针。导致 5*sizeof(int) 大小的连续内存空间的原因不是声明,而是动态分配,它与声明完全分开,与声明的事物的生命周期完全不同,等等。