2009-11-05 60 views
1

我知道可以增加动态分配数组的大小。我可以增加静态分配数组的大小吗?

但是,我可以增加静态分配数组的大小? 如果是,如何?

编辑:虽然这个问题是用于C语言,但也可以考虑其他语言。是否有可能用其他语言?

+0

在什么语言你在工作?这将使所有的差异。 – 2009-11-05 04:35:06

+3

什么语言?了解这将有助于您理解除静态分配数组的定义之外的原因。 – strager 2009-11-05 04:35:12

+1

这听起来像是一个糟糕的(或诡计)作业问题。 – 2009-11-05 04:37:47

回答

5

简单的答案是否定的,这是不能做到的。因此名称为“静态”。

现在,许多语言的东西看起来像静态分配的数组,但实际上是静态分配的对动态分配数组的引用。那些你可以调整大小。

1

在VB .NET这将是:

Redim Preserve ArrayName(NewSize) 

不知道什么语言特点你后虽然...

而且我也不会用这个命令有很多...它可怕效率低下。链接列表和不断增长的数据结构更加高效。

+0

我也同意基思兰德尔,尽管看起来好像我写的语句重新定义了数组的大小它的原因效率低下的原因在于幕后实际上只是制作新的大小的第二个静态数组,将值复制到其中,然后删除旧的数组。 – Jrud 2009-11-05 04:48:49

0

不是。有两个选项:

  1. 使用动态一个
  2. 或者,在浪费内存的风险,如果您有关于元素的数组将存储的最大数量的想法,静态相应地分配

是的,那是C.

0

如果您小心,可以使用alloca()。该数组在堆栈中分配,但就代码风格而言,它与使用malloc(您不需要free它自动完成)很相似。我会让你决定是否调用一个“静态”数组。

+0

这不是一个你正在谈论的动态数组吗? – 2009-11-05 04:55:37

+0

我并不确定你对静态数组有什么用处。如果有用的部分是你不必担心释放它们(并且你不关心这个语言是否提供漂亮的语法来创建它们),那么alloca就可以做到这一点。 – 2009-11-05 05:04:59

+1

@Ravi:不,不像“动态生命期”那样是“动态的”,因为由alloca()分配的数组具有自动生命周期(即与本地变量相同)。但是,它们的大小是在运行时确定的。 – newacct 2009-11-05 06:26:56

0

不可以。静态分配给编译器许可,以进行各种假设,然后在编译过程中将其烘焙到程序中。

在这些假设是:

  1. 它是安全的把其他的数据阵列(不会离开你的成长空间)后,立即和
  2. ,该阵列开始在某个地址,然后成为程序的机器代码的一部分;你不能在某个地方分配一个新的数组(并使用它),因为不能更新地址的引用。

(好吧,引用可以进行更新,如果程序存储在RAM中,但是自修改方案在高度皱起了眉头,而不是动态数组肯定比较麻烦。)

相关问题