我知道可以增加动态分配数组的大小。
但是我可以增加静态分配数组的大小吗? 如果是,怎么样?
编辑:虽然这个问题是针对C语言的,但也要考虑其他语言。是否可以使用其他任何语言?
答案 0 :(得分:5)
简单的答案是否定的,这是不可能做到的。因此名称为“静态”。
现在,许多语言看起来像静态分配的数组,但实际上是静态分配的动态分配数组的引用。那些你可以调整大小。
答案 1 :(得分:1)
Redim Preserve ArrayName(NewSize)
不确定你之后会遇到什么样的事情......
我不会经常使用这个命令......它的效率非常低。链接列表和不断增长的数据结构效率更高。
答案 2 :(得分:0)
没有。它不是。这里有两个选择:
是的,那是C。
答案 3 :(得分:0)
如果您小心,可以使用alloca()
。数组是在堆栈上分配的,但就代码风格而言,如果你使用malloc
(你不需要free
,那就是自动完成)。我会让你决定是否称之为“静态”阵列。
答案 4 :(得分:0)
没有。静态分配使编译器有权进行各种假设,然后在编译期间将这些假设烘焙到程序中。
这些假设包括:
(好吧,如果程序存储在ram中,引用可以更新,但是自修改程序非常不受欢迎,而且肯定比动态数组更麻烦。)
答案 5 :(得分:0)
从技术上讲,在C语言中甚至不可能增加动态分配的数组的大小。
实际上,realloc()
执行某种“创建新对象并复制数据”例程。它根本不会修改现有堆内存对象的大小。
所以答案很简单,因为任何对象或对象数组的大小在分配后都无法更改,无论是动态分配还是静态分配。
您可以做的是通过开发一个函数来使用相同的策略,该函数创建具有所需大小的另一个静态分配的对象数组并复制数据。如果新的对象数组小于旧的对象数组,则差值内的值将被丢弃。
唯一的区别是,新数组的大小(等于旧数组的大小)需要在编译时固定。