C编程 - 堆栈和堆数组声明

Cod*_*mer 2 c c++

假设我将数组声明为 int myarray[5]

或者声明为 int*myarray=malloc(5*sizeof(int))


可同时将申报设置的内存等量字节数?不考虑前一个声明是针对堆栈而后者是堆上的.

谢谢!

Ker*_* SB 5

这有一个根本区别,在您使用 的方式中可能并不明显myarray:

  • int myarray[5]; 声明一个由五个整数组成的数组,该数组是一个自动变量(它是未初始化的).

  • int * myarray = malloc(5 * sizeof(int));声明一个变量,它是一个指向int的指针(也作为一个自动变量),并且该指针是用库调用的结果初始化的.该库调用承诺使得结果指针指向一个足以存储五个连续整数的内存区域.

由于指针算法,数组到指针的衰减以及与之a[i]相同的约定*(a + i),您可以以相同的方式使用这两个变量,即as myarray[i].这当然是设计的.

如果你正在寻找差异,那么可能有以下帮助:五个数组的数组是一个单独的对象,它有一个确定的大小.相比之下,malloc库调用不会创建任何对象.它只是留出足够的内存(并且适当地对齐),但它可以例如分配更多的内存.

(在C++中,当然还有内存和对象之间的区别.)