[英]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.