在C中将数组声明为指针

时间:2019-04-29 05:49:31

标签: c arrays pointers

我有一个类似数组的声明

int a1[5];

如果我这样声明此数组:

int *a2;
a2 = malloc(sizeof(int)*5);

,然后像使用数组a1一样使用它,有什么区别。同样,如果这是在函数中完成的,并且函数结尾a1和a2都超出范围。如果是a1,内存会自动释放,但是如果是a2,内存会自动释放,还是我们必须使用delete来取消分配内存?

2 个答案:

答案 0 :(得分:2)

RecyclerView的内存不会自动释放。您始终可以遵循一条简单的经验法则-如果使用a2进行分配,则需要使用malloc进行分配。

答案 1 :(得分:2)

写作时

int a[10];

您说

  

“为我分配10个内存块,每个内存块可以存储一个整数   值”。

默认情况下,当将此定义放在块中(由{}包围的代码部分)时,不能在块外部使用变量。

为什么?假设程序正在块内执行指令,并且遇到了这个定义。它分配一些内存来存储变量a。当程序发现它已到达块的末尾时,它将破坏它在该块中时分配的整个内存。因此,当您在右括号(})之后引用in代码时,由于内存被破坏,它不知道a是什么。

另一方面,当你写

int* a = (int*) malloc(10*(sizeof(int)));

您说

  

”为我分配10个特殊内存块,每个内存块可以存储一个   整数值”

。这种特殊的内存称为堆内存。之所以特别是因为它存在于一个从未被破坏过的新地方(除非您要求这样做)。因此,您甚至可以在块外访问它。