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