gpt4 book ai didi

c - 当我必须指定内存大小时,malloc 数组和常规数组之间有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:22 25 4
gpt4 key购买 nike

malloc()-ed 数组和常规数组之间的区别是什么,例如,在两者中我都必须指定内存大小

char* arr =  malloc(50 * sizeof(char)) 

对比

int arr [50]

最佳答案

嗯,区别太多了。首先,阅读有关 arrays are not pointers and vice versa 的内容.

也就是说,从可用性的角度来看有三个主要区别(我觉得你对此很感兴趣)

  • 数组的作用域仅限于其封闭 block ,但动态分配的内存是有效的,除非手动释放。因此,不能返回函数的局部数组,但可以malloc()-ing 返回指针。

  • 对于非 VLA在这种情况下,数组大小必须 是编译时常量,但对于malloc(),大小是在运行时指定的。换句话说,对于数组,您需要在编译时知道大小,而对于 malloc()-ing,完全有可能在运行时确定请求的大小。

  • 数组不能调整大小。一旦定义,它们将使用其大小所需的所有内存。 OTOH,一个malloc()-ed 指针,指向一定数量的内存,可以根据需要很好地被realloc()-ed 到其他一些内存量。

关于c - 当我必须指定内存大小时,malloc 数组和常规数组之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42581505/

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