C语言里,什么时候用数组什么时候用指针和动态内存(malloc⼀calloc)?

2024-11-28 12:45:31
推荐回答(5个)
回答(1):

如果明确知道所需内存的大小,可以用数组.
数组大小确实有限制.因为局部数组是分配在栈上的,而栈大小是有限制的,如果超过限制,就会出现栈溢出.

如果不能明确知道所需内存的大小,编程中这种情况非常常见.这个时候只能用动态内存.
但是用动态内存容易出bug,主要是忘记忘记释放内存(内存溢出)和野指针(指针指向的地址不是malloc分配的内存地址). 另外,频繁动态分配内存容易导致内存碎片. 这些问题在嵌入式系统中都是致命的.所以要格外小心.

建议明确知道大小的情况下,并且size不大的情况下,使用数组.
其他情况下使用动态内存.并且记得在使用完毕后释放内存并且让指针赋零值.避免出现bug.

以后编程经验多了,你就知道该怎么处理了.数组和动态内存都会用到的,因地制宜.

回答(2):

这是三种不同的概念:
数组:一种数据结构
指针:储存的值是内存地址的变量,语言工具
动态内存:在堆(heap)中分配的内存,大小随你定,程序运行起来后,并运行了分配语句才时会分配这个内存(动态的,又称运行时的),分配好了后返回一个指针给你,用这个指针操作这块堆内存。

比如:”int arr[100]“,的内存是分配在堆栈(stack) 或者 数据段(初始化段或者未初始化)中,并且必须明确大小,不能像这样:”int arr[nSize]",用一个变量代替他的大小,但malloc中可以,你可以用一个变量表示malloc大小参数,方便于启动程序是传一个你愿意的大小赋值给这个变量。
对于初学者理解很简单:这两种方法分配内存都可以,但是大的内存分配最好在堆(heap)中,因为stack相当来说空间更有限。然后堆(heap)都是通过指针操作,malloc后一定要记得free,打个比方:内存(memory)就像Money,你只管花(malloc、calloc),不管赚(free),迟早是要完蛋的!

回答(3):

堆上分配内存通常比栈慢。
而且堆内存要记得释放不然会造成内存泄漏。
堆内存没有什么限制,现在用的都是虚拟内存。
数组长度确定且主要用于查询时最好在栈上分配。

回答(4):

单纯说内存分配,不说参数化传递。
1.程序使用的范围;
单片机,工业控制,对于已知信息尽量采用数组。短而有效,空间大了就不好了。
2.资源有效使用,不定长度的分离;
不定长度,动态分配。

回答(5):

肯定不是噻,使用动态内存在C语言中要自己手动去释放,如果使用不得当很容易就会造成内存泄露啊之类的。而在栈上分配数组则是由程序自动释放内存,比较安全。