[英]Can I increase the size of a statically allocated array?
我知道可以增加动态分配数组的大小。
但是我可以增加静态分配数组的大小吗? 如果是,如何?
编辑:虽然这个问题是针对 C 语言的,但也可以考虑其他语言。是否可以用其他语言?
简单的答案是否定的,这是不可能的。 因此名称为“静态”。
现在,许多语言看起来像静态分配的数组,但实际上是静态分配的对动态分配数组的引用。 那些你可以调整大小的。
在 VB .NET 中,它将是:
Redim Preserve ArrayName(NewSize)
不知道你在追求什么语言...
而且我不会经常使用这个命令......它的效率非常低。 链表和不断增长的数据结构效率更高。
不它不是。 这里有两个选项:
是的,那是C。
如果你很小心,你可以使用alloca()
。 该数组是在堆栈上分配的,但就代码风格而言,它与您使用malloc
非常相似(尽管您不必free
它,这是自动完成的)。 我会让您决定是否将其称为“静态”数组。
否。静态分配允许编译器做出各种假设,然后在编译期间将这些假设纳入程序。
这些假设包括:
(好吧,如果程序存储在 ram 中,引用可以更新,但自修改程序非常不受欢迎,而且肯定比动态数组更麻烦。)
从技术上讲,在 C 中甚至不可能增加动态分配数组的大小。
实际上, realloc()
执行某种“创建新对象并复制数据”例程。 它根本不修改现有堆内存对象的大小。
所以答案很简单,您无法在分配后更改任何对象或对象数组的大小,无论是动态分配还是静态分配。
您可以做的是通过开发一个函数来使用相同的策略,该函数创建另一个具有所需大小的静态分配对象数组并复制数据。 如果新对象数组小于旧对象数组,则丢弃差异中的值。
唯一的区别是,新数组的大小与旧数组的大小相等,需要在编译时固定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.