2009-11-05 88 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中,但是自修改方案在高度皺起了眉頭,而不是動態數組肯定比較麻煩。)

相關問題