gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:33:34 25 4
gpt4 key购买 nike

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

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


这两个声明是否会以字节数设置相同数量的内存?不考虑前者是栈上的,后者是堆上的。

谢谢!

最佳答案

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

  • int myarray[5]; 声明了一个包含五个整数的数组,该数组是一个自动变量(且未初始化)。

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

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

如果您正在寻找不同之处,那么以下内容可能会有所帮助:五整数数组是单个对象,并且具有确定的大小。相比之下,malloc 库调用不会创建任何对象。它只是预留了足够的内存(并适当对齐),但它可以分配更多的内存。

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

关于c++ - C 编程 - 堆栈和堆数组声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12965938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com